TCP/IP,TCPsocket,tcp协议的特点,tcp报文段最长字节数,tcp头内容,确认号和超时时限的设定细节,tcp协议是GBN和SR的混合体,
一、TCPsocket 1、TCP是面向连接的,它的socket其实是一个数据模型,拥有本IP,目标IP,本端口,目标端口的四元组,还有连接状态信息,并使用一个整数与其对应,这个整数就是文件描述符。 2、这种数据模型封装了一个tcp连接的会话关系,体现在代码上就是socket文件描述符。 3、一个TCPsocket就是一个TCP会话关系。 4、使用tcp通信时,程序员只需要向tcpsocket交付信息,目的IP,目的端口, tcp会将报文,tcpsocket进行传输,发两样东西 5、体现在函数中是: write(clientsocket,buf,sizeof(buf));
二、Tcp的特点如下: 1、点对点,一个发送方,一个接收方,无法一对多或者多对多 2、可靠保序,但是没有报文边界,发送的报文和接受的报文需要自定义协议或者特殊符号区别报文,避免将多个识别为一个,或者一个识别为多个。 3、管道化传输,TCP将应用层的报文分割成长度为MSS的报文段,并给每个报文段加上tcp的头部并存放于发送缓冲区,然后通过发送窗口向接收方发传输报文端。 4、发送和接收都有缓冲区,代码中对应write和read时传入的char[] buffer 5、全双工数据,同一连接中的数据是双向流动的,传输时的报文段最大值用MSS表示,maximum segment size 6、面向连接的,传输数据之前需要握手,传输完了需要挥手 7、有流量控制和拥塞控制,跟随网络状态和接收方状态改变发送速率
三、tcp报文最长字节数与计算 1、应用传给TCP的报文被分割成小的报文段,加上TCP头部(20字节),然后加上IP头部(20字节),然后传给数据链路层, 2、数据链路层的最大传输单位大小为1500字节(bit,简称b), 3、可以计算出TCP的MSS为1460b,分割应用层报文时以1460b为单位。
四、TCP头部:
1、序号: a、TCP头部中的序号不代表tcp分割成报文段时当前报文段的序号,而是当前报文段的第一个字节和整体报文第一个字节的偏移量,是字节序号 b、Tcp连接的发送方和接收方会在握手的时候确认一个序号,就是各自的x值,之后的报文段交换中一直使用确认好的x,每一段各会确认一个x作为初始序号值。 c、每次握手会重新得到一个初始x值,防止新的连接接收网络中的老连接的报文段。
2、确认号: a、给ACK携带的,确认n-1及以前的字节均被收到,tcp中的ACK是期待发送的序号,就是接收到的连续报文段的字节序号+上一个报文段的字节数,
b、如果发送方发送的tcp报文段序号是100,这个报文段内容有19个字节,接收方就会发送一个ACK120,表示自己期望接收的下一个报文段是字节序号为120的tcp报文段,并确认119以及以前的报文段全部收到。 c、如果此时接收方又收到了序号是80,内容为19字节的报文段,通过累计确认机制,接收方还是会发送一个ACK120作为回复。 d、如果接收方在期望120的时候接收到了序号为140的报文段,这属于乱序了,接收方会继续向发送方发送ACK120表示期望(便于引发快速重传),如果140位于接收窗口中,就会将该报文段接收。 e、序号和确认号都是对字节进行计数的,而不是对报文段进行计数的。
3、标志位:URG,ACK,PSH,RST,STN,FIN, a、URG是紧急数据,通常不用 b、ACK是确认应答 c、PSH是马上推出数据,也通常不用 d、RST,SYN,FIN用于建立/拆除连接
4、接收窗口: a、愿意接收的字节数量,就是接收缓冲区空闲区域的大小,用于给发送方控制发送速率,发送方为了防止发送的消息太多溢出导致效率受损,会限制自己的发送窗口的大小。
5、校验和 a、用于检查报文段是否出错。
6、可选项的长度可以通过首部长度计算得出。
五、TCP超时时限的设定: 1、超时时限设置的太长和太短都不合适。 2、在局域网中,tcp报文段传输时往返延时小,可以设定为固定值。 3、往返时延RTT的平均值加上4倍的标准差是动态计算超时时限中合理的设置。
六、TCP协议是BGN协议和SR协议的混合体, 1、使用流水线传输,维护发送窗口和接收窗口。 2、累计确认,肯定应答的序号为期待字节序号的值。 3、发送方窗口只设置一个计时器,与后沿对应的报文段关联,超时后只重传位于后沿的报文段。 4、TCP接收端对滑动窗口以外的包没有规定的处理。 5、发送方在收到发送窗口中某个报文段三个冗余确认应答(加上一个正常的应答一共4个)后会触发后沿报文段重传,这个称为快速重传。
|