加油,偷博仔!
为了给学习增添一丝文艺美感,沉静一下学习的心境。
我买了一本朦胧主义的诗集《顾城的诗》
附几句干净、美好的诗句在开头。
树枝想要去撕裂天空,
却直戳了几个微小的窟窿,
它透出天外的光亮,
人们把它叫做月亮和星星。
——《星月的来由》
进入正题!
一、概述和传输层服务。
目标:
-
理解传输层的工作原理
多路复用/解复用
可靠数据传输
流量控制
拥塞控制 -
学习Internet的传输层协议
UDP:无连接传输
TCP:面向连接的可靠传输
TCP的拥塞控制
老师课件的提纲
1.传输服务和协议
- 为运行在不同主机上的应用进程提供逻辑通信
- 传输协议运行在端系统
发送方:将应用层的报文分成报文段,然后传递给网络层
接收方:将报文段重组成报文,然后传递给应用层 - 有多个传输层协议可供应用选择
Internet: TCP和UDP
2.传输层 vs.(versus) 网络层
网络层服务:主机之间的逻辑通信
传输层服务:进程间的逻辑通信
都是逻辑通信,网络层在主机层面,传输层更细分一步,在进程层面。
且传输层有赖于:
- 依赖于网络层的服务 • 延时、带宽
- 并对网络层的服务进行增强• 数据丢失、顺序混乱、加密
有些服务是可以加强的:不可靠 -> 可靠;安全
但有些服务是不可以被加强的:带宽,延迟
Ann和Bill分别收齐(复用)小孩的信和拆分(解复用)小孩们的信。扫描二维码关注公众号,回复: 12704349 查看本文章
3.Internet传输层协议
- 可靠的、保序的传输:TCP
多路复用、解复用
拥塞控制
流量控制
建立连接 - 不可靠、不保序的传输:UDP
多路复用、解复用
没有为尽力而为的IP服务添加更多的其它额外服务 - 都不提供的服务: 延时保证 带宽保证
二、多路复用和解复用
引入了端口号的机制来区分不同进程,TCP、UDP的端口号都是16bits,有6w+个端口号
在发送方主机多路复用
在接收方主机多路解复用
我是这么理解的:
应用层的报文信息被分成一段一段的段,和socket(假说是TCP的socket,四元组)一起往下层交,然后tcp 加头(目标port、源port + 段),成为报文段segment。然后继续往下层交,加头(目标ip、源ip)
最后再目标的ip处,去头、在目标的tcp处,去头。
本质上,就是使用了port 下面会有例子说明
1.多路解复用工作原理
- 解复用作用:
TCP或者UDP实体采用哪些信息,将报文段的数据部分交给正确的socket,从而交给正确的进程 - 主机收到IP数据报
每个数据报有源IP地址和目标地址
每个数据报承载一个传输层报文段
每个报文段有一个源端口号和目标端口号 (特定应用有著名的端口号) - 主机联合使用IP地址和端口号将报文段发送给合适的套接字
由TCP传递给IP的信息单位称为报文段或段(segment)
再回顾一下第一章“各层次的协议数据单元”
2.无连接(UDP)多路解复用
2.1举个例子:
如图,左右两边的Client 应用 进程P3和P4向中间的Server 应用进程P1发送UDP 数据报。How do they do it?P4和P3发过来的UDP报文段的目标端口(destination port)都是6428 。
即便P4和P3的源ip、源port不一样,但是都发给了中间服务器端口号为6428的、相同的应用进程。
就是这样一个情况。
再来看看中间的Server 的进程P1给左右主机的进程P3、P4是如何发UDP数据报的
如图所示,很明朗了
以表格中的6428为正确的DP,途中绿色框框中DP的值,左边多了个4。
3.面向连接(TCP)的多路复用
-
TCP套接字:四元组本地标识:
源IP地址
源端口号
目的IP地址
目的端口号 -
解复用:接收主机用这四个值来将数据报定位到合适的套接字
-
服务器能够在一个TCP端口上同时支持多个TCP套接字:
每个套接字由其四元组标识(有不同的源IP和源PORT) -
Web服务器对每个连接客户端有不同的套接字
非持久对每个请求有不同的套接字
3.1举个例子:
红色字意思是:三个报文段(segment),都指向IP地址B,dest端口:80,被解复用到不同的套接字
`
如图,主机A(A也是主机A的ip addr)的进程P3和服务器B的进程P4通信,相同的,P5和P3通信、P6和P2通信。
·
主机C的P2、P3进程的源Port不同,但是目标port一致,但对应了Server B的不同进程(P6、P5)
·
主机A的P3和主机C的P3的源port不一样,但目标port、目标ip一样,但对应了Server B的不同进程
·
所以四元组就可以唯一确定一个TCP socket会话关系
还有一张图,课件有,老师没说,我附一下:
“服务器能够根据源IP地址和源端口号来区分来自不同客户机的报文段。
但是套接字与进程之间并非总是有着一一对应的关系。
事实上,Web服务器通常一个服务进程可以为每个新的客户机连接创建一个具有新连接套接字的线程。
显然,对于这样的服务器,在任意给定的时间内都可能有很多套接字(具有不同的标识)连接到同一个进程。”
三、无连接传输:UDP
UDP: User Datagram Protocol [RFC 768]
- “no frills,” “bare bones”Internet传输协议 (没有装饰,光秃秃的骨头“互联网传输协议)
- “尽力而为”的服务,报文段可能
丢失
送到应用进程的报文段乱序 - 无连接:
UDP发送端和接收端之间没有握手
每个UDP报文段都被独立地处理 - UDP 被用于:
流媒体(丢失不敏感,速率敏感、应用可控制传输速率)
DNS
SNMP - 在UDP上可行可靠传输:
在应用层增加可靠性
应用特定的差错恢复
1.UDP:用户数据报协议
源端口号 和 目标端口号各2个Bytes
可以传的很快:网络层的传输速率,几乎就是应用的传输速率
校验和EDC
EDC=error-detection and-correction 差错检测和纠错比特
头部很小(开销cost很小),固定的8个Bytes,而TCP的是20个Bytes头大,开销大。
2.UDP校验和 (校验和,是一个名词噢)
目标: 检测在被传输报文段中的差错 (如比特反转)
要是UDP数据报(datagram)出现了差错,也不纠正,也不反馈,直接drop掉。
-
发送方:
将报文段的内容视为16比特的整数
校验和:报文段的加法和 (1的补运算)
发送方将校验和放在UDP的校验和字段 -
接收方:
计算接收到的报文段的校验和
检查计算出的校验和与校验和字段的内容是否相等:
不相等––检测到差错
相等––没有检测到差错,但也许还是有差错 (残存错误,负负得正感觉,错上加错,反而校验和是对的)
2.1Internet校验和的例子
注意:当数字相加时,在最高位的进位要回卷,再加到结果上
例子:两个16比特的整数相加
回卷就是最高位的进位,加到最低位。
本篇结束。