linuxSocket

来源:互联网 发布:义乌小商品出口数据 编辑:程序博客网 时间:2024/06/06 16:31
1.tcp udp
 tcp是有链接,可靠,有序的,建立链接后数据包内部不包含对方地址信息,数据没有界限的,是一条字节流,tcp则需要更多的开销在链接和终止上
 udp是无链接,不可靠,无序的,每个数据包都是有对方地址信息的,数据间有明显的界限,udp则避免了tcp链接建立和终止所需的开销


客户端:
创建一个套接字描述符
将套接字与地址绑定
建立链接
读写
=======
服务端:
socket
bind
listen:初始一个被动套接字、规定内核套接字排队的最大连接个数。
accpet:用于从已完成连接队列的队头返回下一个已完成链接的套接字。
读写


2.三路握手
 1.客户通过connect发起主动打开:客户TCP发送一个SYN分节,它告诉服务器客户将在里拿结中发送的数据的初始序列号。-->SYN j
 2.服务器必须确认ACK客户的SYN,同时自己也得发送一个SYN分节,它含有服务器在同一连接中发送的数据初始化序列号 --> SYN k, ACK j+1
 3.客户必须确认服务器的SYN--->ACK k+1


3.TCp链接终止:(tcp建立链接需要3个分节,终止一个链接则需要4个分节)
 1.close主动关闭,发送一个FIN分节,表示数据发完--》FIN M   user1主动
 2.接收到FINf分节,执行被动关闭 -->ACK M+1 user2被动
 3.FIN N user2被动
 4.ACK N+1 user1主动


5.标识每个端点的两个值:ip + 端口 === 称为一个套接字
6.端口号和地址结构总是以网络字节序列来存储
7.


首先服务端注册好N个有名字的方法
有了链接首先就去查看头一段固定字节的信息是否==某个方法名
然后
int (*SocketServer[50])(int);函数指针数组

map<string,int> method;注册用的N个接口的方法名,绑定好SocketServer【】数组指向的函数,其下标与indexMethod锁注册的下标一致。

每accept一个socket,就创建一个线程来执行,吧socketfd作为参数传入到该线程中去,寻找相应的接口进行函数调用即可。


2七层模型的分层与功能跟协议

应用层 (Application): 网络服务与最终用户的一个接口。协议有:HTTP FTP TFTP SMTP SNMP DNS
表示层(Presentation Layer):数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)
会话层(Session Layer):建立、管理、终止会话。(在五层模型里面已经合并到了应用层)
传输层 (Transport):定义传输数据的协议端口号,以及流控和差错效验。 协议有:TCP UDP
网络层 (Network):进行逻辑地址寻址,实现不同网络之间的路径选择。协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
数据链路层 (Link):建立逻辑连接、进行硬件地址寻址、差错效验等功能。(由底层网络定义协议)
物理层(Physical Layer):建立、维护、断开物理连接。(由底层网络定义协议
http://wenku.baidu.com/link?url=CoSTklkddDGM-9S4u7PQF-wgAOvMB5OU8HZLmkn6C70rdCxnOyKDtRGFbvldpcgGYEeoWrvufKO71UklZwC5hMnD7JK6xw4L0fFCdK8-o-m

原创粉丝点击