操作系统中单机进程通信主要有两种方式:共享内存和Unix套接字。而现实中常见的网络通信都是多机、跨平台、跨设备,那么实现这样的网络通信,实际上是不同主机中进程与进程之间的通信。使用端口来标记每台主机上的进程(port,使用16bits来显示,0——65535)。了解了这些我们进入传输层的学习,传输层主要负责管理端到端的连接,某一个主机的进程与另一个主机的进程之间的连接。传输层一般学习两个协议,UDP和TCP。
(1)UDP(User Datagram Protocol)协议,用户数据报协议
数据报:应用层传的数据,不合并、不拆分。UDP协议位于IP数据报的数据部分。
UDP数据由UDP头部和UDP数据报数据组成。UDP头部信息如下:
UDP特点:1) UDP是无连接协议(无需提前建立连接);2) UDP不能保证可靠的交付数据(无法保证数据不丢失不出错); 3) UDP是面向报文传输的(不会对来自应用层的报文进行任何处理);4) UDP没有拥塞控制;5)UDP首部开销很小(包含的信息少)。
(2)TCP(Transmission Control Protocol)协议,传输控制协议
TCP协议同样是位于IP数据报数据中,分为TCP头部和TCP数据报数据。TCP协议的特点:1) TCP是有连接的协议; 2)TCP协议提供可靠的传输服务; 3)TCP连接有两端(点对点通信);4)TCP协议提供全双工通信; 5)TCP面向字节流的协议(可能会按字节流合并、分析数据)。
TCP头部信息如下:
源端口:发送方的进程端口; 目的端口:接收方的进程端口;
32位序号:0-2^32-1,数据一个字节有一个序号,这里表示的是数据首字节序号;
32位确认号:表示自己期望收到的数据的首字节序号。若确认号为N,则表示前N-1序号的数据接收到了。
4位数据偏移:数据偏离首部的长度,范围是0-15,单位是32位字(4字节),即可退出TCP首部最大长度60字节。
TCP标记:URG:紧急位,为1时表示紧急数据; ACK:确认位,为1时,确认号才有效; PSH:推送位,为1时表示尽快把数据交付给应用层; RST:为1时表示重新建立连接; SYN:同步位,为1时,表示连接请求报文(TCP三次握手时); FIN:结束位,为1时表示释放连接(TCP四次挥手时)。
窗口:指明允许对方发送的数据量;
紧急指针:紧急数据(URG=1),指定紧急数据在报文的位置;
TCP选项:最多40字节(因为头部至少20字节,5行至少20字节)
TCP可靠传输的基本原理:停止等待协议和连续ARQ协议。
停止等待协议:发送方发送一个消息,必须收到接收方的回应才发送第二个消息,期间处于等待状态,其中还设置了超时定时器(确认发送的消息什么时候过期),超过特定时间没收到回应,就会重新发送该消息,即超时重传机制。停止等待协议是最基础的可靠传输协议,但很显然对于信道的利用率太低。因此出现了连续ARQ协议。
连续ARQ(Automatic Repeat Request)协议,自动重传请求协议:基于滑动窗口实现的,设窗口大小为n,一次发送n个字节数据,然后收到前m个数据的回应则向前移动窗口。采用累积确认的方式:收到k的确认信息,则表示1-n-1的确认信息都收到了。如果中间有没有收到确认信息的,该窗口中的数据从头开始全部重传,或者选择重传,选择需要重传的字节重传。TCP的可靠传输机制依赖于连续ARQ协议和选择重传机制。
TCP协议的流量控制(企业常用):让发送方的速率不要太快,流量控制使用滑动窗口实现,通过窗口告知发送方当前通道最大容量为多少。当发送方接收到可用窗口为0的消息时,启动坚持定时器,每隔一段时间发送一个窗口探测报文(看窗口是否扩大可以传输数据了),防止发生接收方发送窗口大小时数据丢失而引发死锁的情况。
本篇内容先介绍到这里,下期将介绍TCP协议的拥塞控制、三次握手、四次挥手过程。以及套接字与域套接字编程的相关内容。(本文所有图片来源于网络,如有侵权,请联系我删除)