目录
写在前面
这一周来总结一下计算机网络的运输层部分,我回顾了一下,到现在对计算机网络的学习记录大概有一个月时间了,写到这里,我感觉到这段时间的坚持是对的,比较完整系统地整理这方面的知识,逐渐形成了一个知识体系,而不再是以前那些零碎的散点。好像就是,脑海里的记忆碎片连接起来,分配了一块连续内存来存储这个知识体系一样。:)
当然,这花了不少时间总结学习,温故知新这个词在这段时间不断印证着,希望能继续保持!
这里我汇总了这段时间的学习总结——“不迷路导航”,有需要的伙伴可以查看,我觉得是这段时间总结比较完整的成果。
计算机网络“不迷路导航”:
下面开始进入这周的正题,运输层!
一、BOSS-->>>--运输层
运输层介于应用层和网络层之间,是整个网络体系结构中关键的层次之一。它属于通信部分的最高层,用户功能中的最低层。
1、运输层如何实现通信?
在计算机网络中,主机之间进行通信的实体,是两端主机中的进程而不是主机,也就是说实际上是两个主机的应用进程之间端到端的通信。
运输层提供进程间的逻辑通信。就好像是沿着水平方向传送数据,但实际并没有这条水平的物理连接。为了更好地理解这一说法,上图最直观!(来源:百度百科)
从图中也可以发现,IP协议和运输层协议的区别以及作用范围。更具体地理解可以是,网络层提供主机之间的逻辑通信,而运输层提供应用进程之间的逻辑通信。
2、复用和分用
运输层有两个重要的功能:复用和分用。在最开篇TCP/IP体系结构我有记录到这一概念。
复用:发送方不同的应用进程都可以使用同一个运输层协议传送数据(在首部加上对应标识)。
分用:接收方的运输层根据首部能够把数据正确交付给目的主机的对应进程。
这里的功能实现使用到端口号。根据不同的端口号可以准确地交付给应用进程。
二、UDP:用户数据报协议
先来看看很常见UDP到底是什么,有哪些特点。
用户数据报协议简称UDP,是一个很重要的运输层协议。它在传输数据之前不需要建立连接,接收方也不进行确认,不提供可靠交付,正因为如此,它具有了自身的优势。
UDP是无连接的,减少了开销和发送数据前的时延。
UDP尽最大努力交付,不保证可靠交付。
UDP没有拥塞控制,网络出现拥塞源主机的发送速率不会降低。这个特点对于视频通信的应用等十分重要,通常这需要恒定的速率发送数据,不允许过大的时延,但对于数据丢失是允许的,就如丢失几帧画面影响不大。
面向报文。简单理解就是,UDP对接收到的报文不会进行分组发送,也不会合并报文发送,它只会直接把整个报文交给应用程序。因此,合适大小的报文很重要。
UDP支持一对一、一对多、多对一、多对多的交互通信。欢迎查看我之前写的UDP实战应用:基于UDP协议网络Socket编程(java实现C/S通信案例)
UDP报文首部只需要8个字节,减少许多开销。
那下面就来瞅瞅UDP数据报文的格式!
三、UDP报文详细格式
UDP报文由两个字段组成,数据和首部。刚刚说到的首部只有8个字节,首部共有4个字段,分别两个字节。
- 源端口
- 目的端口
- 长度:用户数据的长度
- 检验:差错检验码(反码求和检验方法),防止UDP传输中的差错。
其中,首部最重要的标识就是源端口和目的端口,标识发送方和接收方。实际上是使用一个二元组,被称为套接字地址,格式为(IP地址,端口号)。以这种格式分别定位了发送方和接收方的应用程序。
如上图(来源:百度百科),直观地体现UDP数据报的格式以及与IP数据报的关系。
四、TCP:传输控制协议
TCP可谓人人皆知,在计算机网络中的天地非同小可。它是TCP/IP体系中面向连接的运输层协议,这一点跟UDP明显不同,它提供全双工通信和可靠交付服务。
TCP协议十分复杂,应用十分广泛,它的特点有这些。
- TCP是面向连接的。换言之,在数据发送之前必须建立TCP连接,使通信双方做好数据传送的准备,这一点可以很好理解。
- 每条TCP连接只能有两端,进行点对点的通信,两个端点有两个套接字Socket标识,格式是(IP地址,端口号)。
- TCP提供可靠的交付。通过TCP连接传输的数据是无差错、不丢失、不重复、按序到达的。
- 提供全双工的通信。通信双方都可以在任何时候发送数据给对方,设有发送缓存和接收缓存。
- 面向字节流。TCP将数据看成一串字节流,在进程之间进行传输,“流”是一种字节序列。
TCP的一个连接由两个端点的四元组组成,就是源/目的套接字来标识的。因此,即使目的地址和端口都相同,来自不同源的TCP报文是不会交付到同一个TCP接收缓存中的,这一点也是跟UDP的明显区别。
通常TCP服务器会使用一个端口号与不同的客户端建立多个连接,然后创建多个子进程来与客户端进行通信。
对应之前我写的TCP实战中,可以查看:Java多线程实现多用户与服务端Socket通信
五、TCP报文具体格式
TCP报文段相对复杂一些,分为数据和首部两个部分,首部包含了许多实现可靠连接和通信的字段标识,可以说TCP的全部功能都体现在它的首部字段中。
TCP首部前20字节是固定的,这与IP数据报的首部固定相似。后面有4的整数倍字节是可变部分。先看看直观的图,再解析每个字段的意义:
首部的重要字段具体如下:
1、源端口和目的端口
共占用4个字节。这与UDP作用一致,标识了发送方和接收方,用于复用和分用。
2、序号
占用4个字节,32位,可以对4G的数据进行编号。序号范围0~2^32 - 1,共4294967296个序号。序号按本报文的第一个字节序号开始计算,假设为101,数据长度100字节,那最后一个字节是200,下一个报文序号从201开始计算。
3、确认号
占用4个字节。TCP采用累计确认,这个字段是期望收到对方的下一个报文的第一个数据字节的序号。
4、数据偏移
以4字节长为计算单位,标识了TCP报文段的数据的起始距离TCP报文段的起始有多远。
5、确认ACK
每次接收数据的ACK响应,当ACK=1时确认号字段才有效。
6、复位RST
RST=1时候,说明TCP连接中出现严重差错,必须释放连接重建,也称为重置位。
7、同步SYN
用来建立一个连接。当SYN=1,说明是连接请求报文段,对方响应连接后,响应报文中SYN=1,ACK=1.
8、终止FIN
用来释放连接,FIN=1,说明发送方数据发送完毕,要求释放连接。
9、窗口
占两个字节。告知自己的接收窗口大小,控制对方发送的数据量,范围0-2^16 - 1,单位字节。
10、选项
长度可变。其中的一个重要选项是 最大报文段长度(MSS)。MSS会告诉对方TCP:“我的缓存能够接收的报文的最大长度数据字段为MSS个字节”。
MSS的选择不简单,涉及网络资源的利用率和IP层传输时的分片。默认MSS为536字节长.
写在后面
其实TCP部分的内容还有很多很多,这一篇的总结主要在于认识TCP的基本内容。可以看出运输层在网络的重要性不同一般,它完成了与用户通信最关键的步骤。所以,接下来会继续运输层的探索,包括TCP的可靠传输实现,TCP的流量控制、拥塞控制,最最重要的TCP三次握手、四次挥手具体过程!
计算机网络“不迷路导航”:
后面的内容还有很多很多,为了保证文章质量和读者的阅读体验,会合理分开总结记录!
如果觉得不错欢迎“一键三连”哦,点赞收藏关注,评论提问建议,欢迎交流学习!一起加油进步!
我的CSDN博客:https://csdn-czh.blog.csdn.net/article/details/116169876
转载:https://blog.csdn.net/Charzous/article/details/116169876