笔记:《UNIX网络编程卷1:套接字联网API》

第二章

TCP的三路握手、TCP的连续终止序列、TCP的TIME_WAIT状态

概念

IPv4

IPv6

TCP

UDP

SCTP

ICMP

IGMP

ARP

RARP

ICMPv6

BPF

DLPI

RFC            Request for Comments     请求评注(文档定义)

RTT               round-trip time               客户单和服务器之间的往返时间

UDP     用户数据报协议

RFC 768

UDP不提供确认、序列号、RTT估算、超时和重传机制

               不提供流量控制

UDP可以是全双工的

TCP     传输控制协议

RFC 793     RFC 1323     RFC 2581     RFC 2988     RFC 3390

TCP提供客户和服务器之间的连接,TCP客户先与某个给定服务器建立一个连接,再跨该连接与那个服务器交换数据,然后终止这个连接。

TCP给每个分节关联一个序列号          (一轮一轮循环)

分节是TCP传递给IP的数据单元

TCP提供流量控制(flow control)

通告窗口(advertised window)               TCP告诉对端在任何时刻它一次能接受多少字节的数据(可用的空间量)

TCP是全双工的(full-duplex)

SCTP     流控制传输协议

RFC 2960     RFC 3309     RFC 3286

SCTP在客户和服务器之间提供关联,像TCP那样给应用提供可靠性、排序、流量控制和全双工的数据传送。一个关联指代两个系统之间的一个通信,它可能因为SCTP支持多宿而不止两个地址。

SCTP是面向消息的,提供各个记录的按序递送服务

          提供多宿特性,使得单个SCTP端点能够支持多个IP地址。(多个冗余网络连接,增强健壮性)

类似的健壮性在路由协议的辅助下也可以从TCP中获得。如:iBGP实现同一域内的BGP连接把某个虚拟接口的多个地址作用于TCP连接的端点。

TCP连接的建立和终止

帮助理解connect、accept和close这三个函数,并使用netstat调试TCP应用

三路握手

SYN(同步) -> ACK(确认)

每个SYN可以含有多个TCP选项

MSS选项          通告对端它的最大分节大小(maximum segment size),使用TCP_MAXSEG套接字选项提取和设置。

窗口规模选项    TCP连接的最大窗口大小是65535(相应字段占16位),这个新选项指定TCP首部的通告窗口必须扩大(左移)的位数(0~14),因此提供接近1G(65535x2^14)。前提是两个端系统都需支持这个选项。使用SO_RCVBUF套接字选项设置。

时间戳选项          可以防止失而复现的分组可能造成的数据损坏。类似窗口规模选项的方式协商处理,编程人员无需考虑这个选项。

后两个称为“RFC 1323选项”或“长胖管道选项”

(MTU: Maxitum Transmission Unit 最大传输单元)

(MSS: Maxitum Segment Size 最大分段大小)

http://infotech.blog.51cto.com/391844/123859

TCP连接终止

FIN -> ACK

通常需要4个分节,某些情况下步骤一的FIN随着数据一起发送,步骤二和步骤三发送分节可能被合并成一个分节。

一个Unix进程无论主动(exit,main函数返回)被动(收到进程终止信号)终止时,打开的描述符都被关闭,打开的TCP连接上也发出一个FIN。

TCP状态转换图

TCP为一个连接定义了11种状态。

(在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段。 它们的含义是: SYN表示建立连接, FIN表示关闭连接, ACK表示响应, PSH表示有 DATA数据传输, RST表示连接重置。)

最长分节生命期(maximum segment lifetime,MSL)          MSL是任何IP数据包能够在因特网中存活的最长时间。停留在TIME_WAIT状态的持续时间是MSL的两倍,称为2MSL。(一般是30秒)

每个数据包含有一个称为跳限(hop limit)的8位字段。最大值为255.具有最大跳限的分组在网络中存在的时间不可能超过MSL秒。

2.9 端口号

TCP/UDP/SCIP这三种传输层协议都使用16位整数的端口号(port number)来区分进程。

RFC 1700     RFC 3232

0 ~ 1023                    由IANA分配和控制

1024 ~ 49151            已登记的端口

49152 ~ 65535          动态的或私有端口          临时端口

标识每个端点的两个值(IP地址和端口号)通常称为一个套接字。

2.10 TCP端口号与并发服务器

2.14 小结

发表评论

邮箱地址不会被公开。 必填项已用*标注