首页 > 代码库 > 计算机网络的传输层的简单介绍:

计算机网络的传输层的简单介绍:

在应用层下为传输层,如TCP与UDP;

传输层与网络层之间的不同: 传输层负责信息在主机进程与服务器进程之间的传递; 网络层负责信息在主机与服务器之间的传递;     差了一个进程啊;

传输层的信息用:segment 表示;它是这样得到的:把应用层的message 分成一块块,然后再加上传输层的文件头;

另外,TCP的信息也会用segment表示,UDP的信息用datagram(数据报)表示;网络层上的message也用datagram表示;

UDP:user datagram protocol; 它只会进行两个服务:1, 进程之间的数据交付;2,error checking;

TCP: transmission control protocol; 它进行的服务比较多,因为它是可靠传输;如:数据流控制等;

 

多路复用与多路分解:

由于传输层的作用是把信息交付给不同的socket, 所以呢,在应用层与传输层之间需要用到了多路复用与多路分解;

多路复用指:不同的socket的信息加入身份确认标志,统统变为为segment,然后用传输层交给了下面的网络层进行传送;

多路分解指:把很多segment交付给不同的socket;

要求:1, 存在不同的socket以及对应的端口;2, 每一个segment上应该用用于identify的field,里面的信息为源端口与目的端口;

(补:端口的范围为0-65536,其中0-1023不能随便用,因为它是专用的,如HTTP等 或保留着呢,其它的可以随意用了;)

在一个传输层的segment中的用于识别的字段结构如下图,头占了8个字节:

技术分享

 

无连接的多路利用/分解与面向连接的多路利用/分解

UDP的多路利用/分解:一个UDP socket使用目的主机的IP与目的主机的端口来确定;

TCP的socket:由源IP、源端口、目的IP、目的端口来确定;(一开始的握手segment除外), 所以呢,TCP的socket可以有相同的端口,如WEB服务器的端口好像都是80吧(无端建立连接的socket还是用于传输数据的socket);

 

UDP:

很简单,它把应用层的数据加一个头就变为了UDP的segment. 它的segment的结构如下图所示:

技术分享

它的头包括4个fields, 每一个field的大小为:2字节;内容分别为: 源端口,目的端口,数据的长度和checksum(用于纠错);

下面的application data,为应用层的数据;

 

可靠的传输:

问题1:如何解决发送的packet有误的问题??

解决方法:版本1:当receive收到消息以后,就回复一个ACK(acknowledgment), 如果没有收到的消息出错了,就发送一个NAK,表示让发送者再重新发一遍;

              进级:为每一个信息加一个sequence numbeer, 当收到的信息有误时,不发送该消息的NAK了,而是发送上一个收到的正确的消息的ACK;

问题2: packet在发送过程中,如果Loss怎么办?

解决方法:加入消息重发机制; 当数据loss后,发送者肯定就收不到ACK信息了, 加入一个计时器timer,超过一定的时间就重发;

问题3:如何提高传输的效率?

解决方法:采用流水线设计,具体为: go back N 和 selective repreat;

(里面有一些细节,省略不写,例如:要求未回应的信息的个数不大于N,等)

 

TCP:

它的结构如下图:

技术分享

它的头,占了20个字节;

总的来看TCP, 

最主要的三点吧:

第一,如何进行可靠的传输,包括内容与顺序; 解决方法:对于错误的或loss的进行重传, 对于不是顺序的可以进行丢弃或缓存下来;

其中,怎么判断的问题:一个是timeout,一个是收到3个同一字段有ACK;   对于ACK,TCP采用的是accumulative 的方法,这一点很重要的;

另外的怎么计算timeout的时间啦,怎么重发等细节省略;

第二点:  对于如何解决flow 问题与confession问题,方法基本相同,就是控制发送方的rate(或窗口大小), 但是两者的原因不同,一个是因为接收者上层应用接收的慢,一个是由于网络堵塞; 对于如何把出现上述原因的情况反馈给发送者呢: 前者使用ACK信息里的的相应字段来解决;后者根据ACK到达发送者的状态,如loss了,还是收到了3个多余的重复的ACK来判断,其中当然还有细节;

第三点: 如何使用流水线进行提高效率的问题:关键字:并行发,consequence number, ACK number, 还有一个发送窗口;

 

另外,对于三次握手的建立过程的原理,字段的作用等,也很有意思;可以利用这个原理写端口扫描工具啦,进行网络攻击等;

 

参考:计算机网络第六版,自顶向下;

计算机网络的传输层的简单介绍: