网络TCP协议
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络TCP协议相关的知识,希望对你有一定的参考价值。
TCP协议:对于网络协议而言。TCP在传输层中是一个十分钟要的协议,那么什么是TCP协议呢?
TCP协议概念:
传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。
在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。
应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
以上出自维基百科。
其实对于TCP协议而言,他就是要保证双方之间的传输数据准确而有序,就是这样的一个协议服务。
所以在TCP协议中,我们首先来看一下他的报头信息:
首先我们来说一下各个数据项代表的含义:
源端口号和目的端口号:2个字节的端口号,指的是在传输层中,对应寻找的双方进程的端口,端口号必须是唯一的,根据IP:端口号,也就是套接字来实现应用数据传输。
序号:首先他的范围是[0,2^32-1]。也就是4294967296个序号,序号增加到2^32 -1 后,下一个序号就又回到了0。其实就相当于一个环形buff,mod 2^32运算,在TCP服务中,TCP面向的字节流中每一个字节都按照顺序编号。整个传输的字节流的起始序号必须要连接建立时设置。序号代表发送的第一个字节序号。
确认序号:是期望收到对方下一个保温段的第一个数据字节的序号。也是就是相当于序号到确认号-1的所有数据已正确收到,表示当前发送的数据字段已经正确接收。
数据偏移:4位,指出TCP报文段的首部长度。为什么需要他的存在,因为首部中还有长度不确定的选项字段,数据偏移最大值是60个字节,所以TCP得首部最大长度不能超过60字节,选项的长度不能超过40字节。
保留:保留为今后使用,当前设置为0.
后面是单个位的控制位:
URG:紧急指针字段的有效标识。
ACK:标识确认序号的有效性,建立连接后ACK都为1.
PSH:当两个应用进程进行交互式通信时,有时一段应用进程希望在键入一个命令后立即就能够接收到对方的响应,PSH设置为1,然后就可以立即创建一个报文段发送出去,接收方TCP收到PSH = 1的报文段。则优先推送创建的报文。
RST:RST = 1时,表明TCP连接中出现严重差错,单方崩溃,必须释放并重新进行连接。也可以拒绝非法报文的接收。
SVN:SVN = 1,ACK = 1时。表明这是一个连接请求报文段。
FIN:当FIN = 1,时,表明报文段的发送方的数据已经发送完毕,并要求释放运输连接。
窗口:2字节,代表滑动窗口的最大数据量。
检验和:2字节,检验数据正确性。
紧急指针:2字节,URG = 1时具备使用效应,支出紧急传输的数据字节。
选项:长度可变,可含有:最大报文段长度MSS,选择确认SACK【RFC 2018】,窗口扩大选项,时间戳选项【RFC 1323】。
对于TCP来说,他的报头内容包括这么多,那么他实现有效传输的内部机制都有些什么呢?
以字节为单位的滑动窗口。
超时重传的选择。
增加效率的SACK。
流量控制。
拥塞控制。
对于这些内容的详细介绍,可以看书《计算机网络第6版》谢希仁,P205-223
本文出自 “剩蛋君” 博客,请务必保留此出处http://memory73.blog.51cto.com/10530560/1774035
以上是关于网络TCP协议的主要内容,如果未能解决你的问题,请参考以下文章