★SCTP是流控制传输协议
概念
1.面向消息。
2、提供流,1个流上的消息丢失,不会阻塞后续的消息
3.多宿属性,单个SCTP端点可以支持多个IP地址,类似于链接到一个网络而不是一个主机。
SCTP关联的建立和终止
四路握手
1.客户发送INIT消息,告诉服务器 客户的各种信息,便于初始化
2.服务器发回 INIT_ACK消息,该消息中也包括服务器的各种信息
3.客户发送COOKIE_ECHO消息,回射服务器的cookie,顺带一些用户数据
4.服务器发回COOKIE_ACK,确认客户回射的cookie是否正确,也会顺带一些用户数据。
关联终止
1.服务器的ACK和SHUTDOWN消息必须一起发送
2.没有TIME_WAIT状态,因为SCPT分组的首部有标记INIT块号,不会出现吸收迷路的前连接消息的情况。
★四次挥手中的TIME_WAIT状态作用
1.若最后一步客户发出的ACK丢失了,那么服务器将重发FIN,所以必须维持TIME_WAIT状态到可能的第二次重发FIN的时间。
2.为了避免在终止连接后再次重新建立新连接时,收到之前那次连接“迷路”的分组,要维持一个TIME_WAIT状态以便吸收掉迷路的分组。
★端口号
1~1023——众所周知端口,在unix中也叫保留端口。
1024~49151——IANA注册的端口
49152~65535——动态或私用端口
★如何识别客户请求给哪个服务子进程?是根据目的IP和目的端口号吗
错,应该是根据“套接字对”,即{源IP:源端口}和{目的IP:目的端口}这4个信息来判断给哪个子进程
★关于数据报的长度
IPV4数据报最大为65535字节,IPV6数据报最大为65575字节(首部40字节)
IPV4的最小链路MTU是68字节,IPV4的最小链路 MTU是1280字节。
路径MTU:2个主机路径间的最小MTU。 2个相反路径上的MTU可能不同。
分片:
IPV4主机和路由都可以分片
IPV6只能在产生数据报时分片,不能在转发别的数据报时分片。
MSS: 每个分节中的最大字节数量。
★如何输出数据
TCP输出:(1)调用write时,会把应用程序缓冲区(buff)中的数据复制进套接字缓冲区,并立即返回write。如果没复制完,将继续复制,不会影响write的返回。(2)发生时,会保留一个发送副本,为了之后的重传。
UDP输出:(1)如果应用进程要write的数据长度大于套接字缓冲区,则立即返回错误 (2)不会保留发送副本
SCTP输出:和TCP相反,write必须在全部数据都复制进套接字缓冲区时,才会返回。