内容根据哈工大-李全龙、聂兰顺老师-计算机网络课程总结整理
1.提供的服务
发送方:接受上层协议调用,将报文分成多个报文段(segment),添加控制信息然后交给网络层;多路复用。
接收方:从接收到的报文段中提取出数据,交付上层协议;多路分用。
一个协议可能对应多个上层协议或实体,比如tcp上层有http、smtp。假如主机上同时有两个报文段交给了传输层,需要发送出去。传输层协议会为两个报文的报文段加上控制信息,指明发送方和接收方。这叫做多路复用,同时接收方将来自不同发送方的消息区分开,交给不同的上层协议,叫做多路分用。
2.Internet中,传输层主要有两种协议(还有一些其他的,比如google研究的QUID)
UDP user datagram protocol 用户数据报协议
TCP transmission control protocol 传输控制协议
下面总结两种协议
3.UDP
udp只做了两件事情
- 一是分用和复用:上层协议将报文交给udp后,udp将其分成多个段,加上发送方和接收方的消息,交给网络层,接收方再根据接收端口将数据导向指定端口。
- 二是提供了一个简单的检错码(称校验和,checksum):接收方可以根据这个检测传输过程中是否发生了错误。
具体做法是,将数据分成一个个的16bit的整数,然后每个整数相加,如果高位有溢出,将溢出的数再加到末尾,这一过程称为回卷,最后再取反码。比如:
1111 0010 1011 1100
1010 0101 0000 0001
取和,高位溢出了一个1:
11001 0111 1011 1101
将溢出的1回卷:
1001 0111 1011 1101
0000 0000 0000 0001
得到:
1001 0111 1011 1110
再取反:
0110 1000 0100 0001
所以原始数据
1111 0010 1011 1100 1010 0101 0000 0001
的校验和为:
0110 1000 0100 0001
这种检测码在检测出错误时,说明一定发生了错误,但是发生了错误,并不是一定能检测出来。假如原始数据中两个16bit的整数的首位,本来第一个是1,一个是0,变为了一个是0,一个是1,得到的校验和居然是一样的。
UDP提供的是一种“尽力而为”的服务,在发送前也不建立连接,只管发数据,并不关心对方是否收到甚至对方是否存在。
UDP的报文段格式也很简单
4.TCP
tcp远比udp复杂,发送正式数据前,双方要建立连接(互相确定对方的存在)。然后再发送数据,提供的是一种可靠传输服务。tcp的几个特点是:可靠数据传输、流量控制、拥塞控制。详细内容在下面展开: