前言,要完整的学计网看这,韩立刚老师的课,绝对有趣,而我这是参考慕课网:编程必备基础中的网络篇,都是软件的,不是很全,但是对于搞软件的我觉得够了。有错请指出,谢谢
文章目录
1. 概述
传输层中为应用层实体提供端到端的通信功能或者说管理端到端的通信,保证了数据包的顺序传送及数据的完整性。传输层中主要有两个重要的协议:TCP协议和UDP协议。
端到端是建立在点到点的基础上,点到点通信是指的是信道间的通信,而端到端指的是应用程序(进程)之间的通信。
在操作系统中也有进程的概念,那些进程中的通信,比如共享内存,UNIX域套接字是单机的,即仅限于一台主机内通信,不能跨网络。而网络通信,比如浏览器访问网页,需要通过网络去该网站的后台取得数据,这就是网络中进程间的通信。
常使用端口(Port)来标记不同的网络进程。端口(Port)使用16比特位表示(0~65535)。常见的网络进程端口有:(FTP:21)、(HTTP:80)、(HTTPS:443)、(DNS:53)等。
2. UDP协议
UDP(User Datagram Protocal,用户数据报协议):数据报是应用层传输过来的数据,UDP不会对该数据报做任何处理,会封装到协议里面然后传输出去。
2.1 UDP的组成
- 源端口号:源机器使用的网络进程。
- 目的端口号:目的机器使用的网络进程。
- UDP长度:指的是UDP的首部和UDP数据的总长。首部长度固定为8字节。
- UDP校验和:由发送端计算和存储,由接收端校验。解决数据正确性问题。
2.2 UDP的特点
- UDP是无连接协议,即不需要建立连接即可传输数据。跟电话系统相反。
- 正因为是无连接的协议,所以UDP不能保证可靠的交互数据,即无法保证传输的数据是否会丢失。
- UDP是面向报文传输的,就是UDP数据报。(TCP就不是)
- UDP没有拥塞控制。它不会感受到网络是否拥塞,所以总是发送数据。
- UDP首部开销非常小,总共才8个字节。
3. TCP协议
TCP(Transmission Control Protocol,传输控制协议):是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。
3.1 TCP的特点
- TCP是面向连接的协议,即通信时需要先建立连接。比如打电话。
- TCP的一个连接有两端(端到端),而不考虑中间网段和节点。比如打电话的双方。
- TCP提供可靠的传输服务。
- TCP协议提供全双工的通信。全双方就是双方可以同时进行对话(发送和接收)。
- TCP是面向字节流的协议。字节流就是流入进程或流出进程的字节序列。把数据拆分成几段连续字节流来传输,在接收端把字节流组合起来。
3.2 TCP的组成(只看首部)
- 序号(seq):因为数据会拆分成几段连续字节流后封装到TCP数据报,所以需要记录拆分后每个TCP数据报中的第一个字节的序列号(在原先未拆分前的位置),它的范围为:0~(2^32)-1,在TCP报文中一个字节一个序号。就比如 helloworld,这一串字节流,假设被拆分成了三个 TCP 报文段,第一个报文段携带了 hel,第二个报文段携带了 lowo,第三个报文段携带了 rld,这三个报文段不一定是按照顺序送到对端的,那么对端收到这三个段是如何确定他们的顺序的呢?此时序号的意义就体现在这里。参考:TCP的序号
(TCP至少有20个字节的首部)
- 确认号(ack,与大写ACK不一样,看下面的TCP标记):期望收到的下一个数据报中数据的首字节序号,它的范围为:0~(2^32)-1。假设确认号为N,则表示N-1序号的数据都已经收到了。前面这句话更准确的表示意义是:假设接收方确认接收到了1到n-3、n-2、n-1字节,那么接收方就会返回一个确认号为n,表示n之前的字节都已经收到,现在期望接收第n个字节,即是对接收到的数据的最高序列号的确认。好好理解这个例子,比如传1,2,3,而接收方只接收了1,3,这时如果返回确认号4(表示4之前