概述
TCP/IP传输层相关基础知识
数据链路中MAC地址用来识别同一个链路中不同的计算机,网络层IP中的IP地址用来识别TCP/IP网络中的互联的主机和路由器。在传输层中,使用端口号识别同一台计算机中不同的应用程序。通信过程中,通过IP地址,端口号,协议号进行通信识别,缺一不可。包括源IP地址/目标IP地址/协议号(TCP or UDP ```)/源端口号/目标端口号。若有一项不同,则被认为是其他通信。
以TCP通信示例,如下图所示 :
端口号由其使用的传输层决定,不同的传输层协议可以使用相同的端口号,数据到达IP层后,会先检查相应的协议号,如果是TCP协议就传给TCP处理,如果是UDP协议就传给UDP模块去做端口号的处理。由于传输协议是各自独立的,所以使用相同的端口号,彼此之间不会受到影响。
端口号确定方法有两种:
- 标准既定的端口号:每个应用程序都有指定的端口号,如HTTP/TCP/UDP等知名端口一般由0-1023数字分配,除此之外,还有一些端口也被正式注册,分布在1024-49151之间。
- 时序分配法:操作系统为每个应用程序分配互不冲突的端口号,客户端应用程序完全不用自己设置端口号,一般是在之前的基础上加1,这种动态分配端口号取值49152-65535之间。
TCP/UDP区别:
UDP提供面向无连接/不可靠的服务,没有复杂的控制,可随时发送数据,多用于音视频通信/广播通信/包总量较少的通信(DNS)等;
TCP提供可靠的通信服务,同过校验和/序列号/确认应答/重发控制/连接管理/窗口控制等机制实现可靠性传输。
UDP的包头格式如下:
UDP包头比较简单,很容易理解,其中检验和放在TCP中一起说明 。
TCP包的包头格式如下:
TCP的包头比较复杂,这是为了实现可靠性传输。
序列号:字段长32位,指数据发送的位置,每发送一次数据,就累加一次该数据字节数的大小。初始值不是0或1,而是由计算机生成的随机数作为初始值。
确认应答号:TCP中每接收一个数据就会回应一个应答数据数据包,确认应答号是指下一次应该收到的数据的应答号,发送端收到这个应答号后可认为在这个序号之前的数据包均被正常接收。
数据偏移:TCP所传输的数据应该从TCP包的哪个位置开始,即TCP首部的长度。该字段长4位,单位为4字节。如上图中TCP首部为20字节剩余部分为TCP数据,则该值应为5。
保留:为以后扩展使用。
控制位:字段长8位,对应的位为1时,具体含义如下图所示:
窗口大小:字段长16位,指从TCP确认应答号开始位置能够接收的数据的大小(字节为单位),TCP不允许发送超过该大小的数据。如窗口大小为0,则可认为是发送窗口探测,此时TCP数据必须为1个字节。
检验和:UDP和TCP包头中都存在校验和,确定一个通信需要确认IP/端口/协议,而UDP/TCP首部并没有包含源IP地址和目标IP地址和协议号,IP地址/协议号存在于IP包中,IP包在被路由器转发过程中,若路由器出现故障,IP数据包有可能被破坏。校验和可防止出现路由选择错误的数据段。
下图为TCP/UDP 的伪首部,计算校验和需要用到伪首部,从IP层获取到IP地址信息等,构成TCP伪首部/UDP伪首部。
为了计算一份数据报的IP检验和,首先把检验和字段置为0。然后,对首部中每个16bit进行二进制反码求和(整个首部看成是由一串16bit的字组成),结果存在检验和字段中。当收到一份IP数据报后,同样对首部中每个16bit进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。如果结果不是全1(即检验和错误),那么IP就丢弃收到的数据报。但是不生成差错报文,由上层去发现丢失的数据报并进行重传。
紧急指针:表示本报文中紧急数据的指针,从数据部分的首位到紧急指针所指示的位置为止均为紧急数据。
**选项:**用于TCP传输性能。
最后
以上就是洁净镜子为你收集整理的TCP/IP传输层相关基础知识TCP/IP传输层相关基础知识的全部内容,希望文章能够帮你解决TCP/IP传输层相关基础知识TCP/IP传输层相关基础知识所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复