计算机网络W8:传输层TransportLayer
大作业
P119
要求 完成书上的4个作业中的作业1和作业4.
最好的是作业1和作业4都完成并串起来.
基本要求:作业1 要完成,作业1完成才是project完成的底线.
作业1要考虑大的负载和多线程.
写正确v.s.写的性能提高.
概览
UDP与TCP的工作原理;
多路分解
TCP:可靠的数据传输,网络层的服务模式却是尽力而为,当IP层/链路无法保证可靠性时,TCP如何做到它是一种可靠的数据传输呢?
在搭载了可靠上,又希望它能做到流量控制和拥塞控制;
[难点]
UDP没有流量控制和拥塞控制;
多路复用
多路分解
传输层是端系统进程到端系统进程的,
发送:多个application传入到一个网络;
接收:网络/传输层如何将数据报文分解到多个应用层去.
3.1 传输层协议
传输层解决的是两个端系统上的进程之间的传输.
网络层解决的是两个主机,(端系统)时间的传输.
即便是实验的socket也是走了一圈的网路的.
发送端:
下流程叫多路复用
应用层给传输层一些segments,
传输层再加上一些报文头,端口号.
传输层再将报文段传输给网络层.
接收端:
下流程叫多路分解
传输层将报文段组装成message,上传给相应的应用;
可靠性的理解
- 发送端的数据一定可以被无差错的传送给接收端.
- 应用层的DNS和其他一些P2P应用,如BT也会使用UDP;
- 传输层的HTTP,FTP,SMTP,POP3;
TCP往下的网络层,无法提供可靠性,只能best-effort;
可以乱序到达,但是TCP要有办法将其排列的跟发送顺序一样,排列完毕以后再交付给应用层;
UDP既无法保证可靠,也无法保证有序的交付.
no-frills extension of “best-effort “IP
IP是网络层的
3.2 多路复用与多路分解
多对1:复用;
![截屏2020-05-08下午1.48.41](/Users/chixinning/Library/Application Support/typora-user-images/截屏2020-05-08下午1.48.41.png)
分解:根据不同的端口号进行分解.
具体工作情况
UDP segment format
sourcePort | destport |
---|---|
Other header fields() | Other header fields() |
Application data(payload) | Application data(payload) |
- host receives IP datagrams
- Host uses IP addresses and port number to direct segment to appropriate socket.
多路分解由传输层完成,纯属层根据相应的IP与端口,投给相应的socket
多路复用:从源主机的不同套接字中收集数据块,并为每个数据块封装上首部信息(这将在多路分解时使用)从而生成报文段,然后将报文段传递到网络层的工作称为多路复用。
多路分解:将运输层报文段中的数据交付到正确的套接字的工作称为多路分解。
多路分解和多路复用的TCP和UDP的过程不一样,二者都是由传输层完成的.
复用:不同套接字风装-》网络层
多路分解:网络层->交付到套接字
因为TCP是要建立连接的
TCP segment format
TCP 连接由四个字段定义:
源IP源端口
目标IP目标端口
socket不是只对应了一个进程,将socket理解成通信信号能更好的理解.
对于访问华师大官网的80端口,为了性能的提高,设置了线程服务器;
即线程服务器httpserver可以让性能变得更高一些.
当端口号是一样的时候,无法通过端口号区分,此时一个链接由4个字段标示,这是与TCP的一个很大的区别.
之前是先建立好连接的
3.3协议如何的设计
UDP
IP层作为网络层尽力而为,UDP没有做一些更可靠的东西,故UDP仍然是尽力而为.
故UDP无法做到保序,故顺序有可能发生变化;
UDP没有发送者和接受者之间握手建立连接的过程;
DNS
DNS没有连续大量数据传输,只是简单的一个查询和一个回答,数据量很小时,单个的数据报文既可以完成,所以DNS只需要UDP即可.
UDP是一个Threshold范围内的容忍度.容忍度的检测时是app层完成的.
UDP报文:
报文头短
Checksum:传输过程中错误处理.只能看到错误,无法纠错.
以原数据每16位作为一个分割,每一位加起来,和的高位溢出放到低位,取反码作为校验和.
如果是16个1,则传输正确.
校验有很多编码方式;
![截屏2020-05-08下午2.19.13](/Users/chixinning/Library/Application Support/typora-user-images/截屏2020-05-08下午2.19.13.png)
Checksum只是我做的一个记号,最后这个记号只有16位.
唯一付出的存储代价是那个checksum的16位,但又付出了计算代价.
3.4 TCP的可靠性如何保证
可靠性是逐步保证和实现的.
可靠的数据传输top10problem之一
在不可靠的信道上建立可靠的传输
- rdt_send()//reliable
- Udt_send()//unreliable
![截屏2020-05-08下午2.28.51](/Users/chixinning/Library/Application Support/typora-user-images/截屏2020-05-08下午2.28.51.png)
Reliable data transfer
Ret_send<->udt_end<->unreliable channel<->rdt_rcv->deliver_data()
有限状态机FSM
一个状态到另一个状态中间发生了迁移.
数据流与控制流;
在传输的过程中,数据是没有错误的?
在传输的过程中,数据产生了错误的,但是数据并没有丢失,此时发送和接收是什么样的?
在传输的过程中,数据产生了错误的,数据也丢失,此时发送和接收是什么样的?
停等模式:性能低
流水线模式:
如何设计一个协议,协议是状态机的一个迁移?
Reference:[阮一峰的个人博客](http://www.ruanyifeng.com/blog/2017/06/tcp-protocol.html