1、七层模型
根据OSI七层模型从下到上分为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
各层主要任务:
(1)物理层负责把逐个的比特从一跳(结点)移动到下一跳。
(2)数据链路层把物理层转换为可靠的链路。它使物理层对上层(网络层)看起来好像是无差错的。
(3)网络层负责把分组从源点交付到终点,这可能要跨越多个网络(链路)。
(4)传输层负责完整报文的进程到进程的交付。其任务有:服务点编址、分段与重装、连接控制、流量控制、差错控制。
(5)会话层就是网络的对话控制器。它用于建立、维持并同步正在通信的系统之间的交互。会话层的具体任务有:对话控制、同步。
(6)表示层考虑的问题是两个系统所交换的信息的语法和语义。其任务有:转换、加密、压缩。
(7)应用层让用户能够接入网络。应用层提供了接口,也提供多种服务支持(网络虚拟终端、文件传送、存取和管理、邮件服务、名录服务)。
各层数据传输单位:
(1)物理层的通信单位是比特。
(2)数据链路层的通信单位是帧。
(3)网络层的通信单位是数据报。
(4)TCP/IP有两个传输层协议:用户数据报协议(User Dategram Protocol)和传输控制协议(Transmission Control Protocol)。
传输层的通信单位可以是报文段、用户数据报或者分组,取决于运输层使用的具体协议。
(5)应用层的通信单位是报文。
2、传输层的作用
传输层将用户应用程序的数据交由网络层分包、路由传输到执行机器的进程,同时从网络层接收的数据报重新组合交由上层应用程序的操作。
3、传输层存在的缘由
网络层与传输层功能类似,都分为建立连接、数据传输、释放连接三个阶段;编址、寻址、流控制、差错控制也是类似的。无连接的传输服务与无连接的 网络服务也非常类似。一个很显然的问题:既然传输层的服务与网络层的服务如此相似,那么为什么我们还要两个独立的层呢?
原因在于:传输层的代码完全运行在用户的机器上,但是网络层主要运行在由承运商控制的路由器上。试想以下几种情况?
① 网络层提供的服务不够用;
② 频繁的丢失分组;
③ 路由器时常崩溃。
用户在网络层上并没有真正的控制权,所以他们不可能用最好的路由器或者在数据链路层上用更好的错误处理机制来解决服务太差的问题。唯一的可能是在网络层之上的另一层中提高服务质量。可见,网络层数据传输具有不可靠性,这也是传输层存在的必要性。传输层不仅仅是另外一层,它是整个协议层次的核心所在。如果没有传输层,那么分层协议的整个概念将变得没有意义。注:网络层与传输层很相似,但是也有区别:网络层(IP层)提供点到点的连接即提供主机之间的逻辑通信,传输层提供端到端的连接——提供进程之间的逻辑通信。网络层是不可靠数据传输,但是传输层TCP协议可靠数据传输。
链接:
4、传输层主要任务
向上屏蔽数据传输细节、向下屏蔽通信网络类型,提供连接、流量控制、差错控制、拆包组包功能。
① 跟踪源主机和目的主机上应用程序间的每次通信;
② 将数据分段,并管理每个片段;
③ 将分段数据重组为应用程序数据流;
④ 标识不同的应用程序。
5、通信端口号
不同计算机不同环境,通过端口号这一种方式标志数据通信的开始与结束。
端口号范围 端口类型
0-1023 公认端口
1024-49151 注册端口
49152-65535 私有和动态端口
6、传输层协议——TCP、UDP区别
TCP面向字节流的带连接的可靠数据传输,UDP是面向用户数据报的不可靠数据传输。
7、TCP实现细节
(1)TCP协议头
1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
URG:紧急指针(urgent pointer)有效。
ACK:确认序号有效。
PSH:接收方应该尽快将这个报文交给应用层。
RST:重置连接。
SYN:发起一个新连接。
FIN:释放一个连接。
http://blog.chinaunix.net/uid-7411781-id-3812206.html
(2)可靠连接——三次握手、四次挥手
http://blog.csdn.net/whuslei/article/details/6667471
注:
1)在TIME_WAIT状态中,如果TCP client端最后一次发送的ACK丢失了,它将重新发送。TIME_WAIT状态中所需要的时间是依赖于实现方法的。典型的值为30秒、1分钟和2分钟。等待之后连接正式关闭,并且所有的资源(包括端口号)都被释放。
2)为什么三次握手却要四次挥手?
三次握手中建立连接没别工作要做,服务器可以直接将同步与应答返回给客户端,但是四次挥手的时候,客户端要关闭,但是服务器端也许还有数据要传输,收到客户端断开请求,服务器应答收到数据,待传输玩数据后返回一个断开。这期间可以有数据传输。
3)TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
按道理四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。
(3)数据分包
最大报文长度(MSS),建立连接时就互相通知(SYN保温段中),一般为1024,以太网MSS可达1460.
(4)定时重传
发送出去一个数据报启动一个定时器,超时没收到应答则重传。接收到数据不是立即应答,而是推迟几分之一秒
(5)拥塞与流量控制
Nagle算法:TCP连接撒谎那个最多只能有一个未被确认的未完成的小分组,在该分组的确认到达之前不能发送其他的小分组。
滑动窗口协议:互相发送可以接收的数据报长度,而不必停等确认信息,发送多个数据报。
窗口大小会影响性能,一般为4096Byte,
(6)错误校验 :CRC校验和
(7)丢重复包和重组接收包 (损坏、丢失、确认丢失)
无差错接收的数据帧不一定要一一确认,被破坏的数据帧必须要进行确认。
回退n帧自动重复请求:若一帧丢失或损坏,从最近一次得到的确认数据帧开始的所有数据帧都要重传。损坏/丢失返回NAK?,重发相应的数据帧。(损坏丢失的情况)
丢失确认帧:发送方不会对每一数据帧都确认,不能通过确认帧编号的缺失识别丢失的ACK帧或NAK帧,而是采用定时器方法。每当窗口容量达到时定时器就开始计时。
选择拒绝自动重复请求:只对特定的丢失帧或损坏帧被重发。一帧损坏返回NAK帧并该帧不按顺序重发,需要接收设备对接收数据帧排序并将重传帧插入到序列帧正确位置。
接收设备需要:保存以前所有数据帧,对数据帧排序,查找丢失需要重传帧。
ACK帧编号和NAK帧编号必须指明接收或丢失的帧,而不是期待接搜的下一帧。推荐的窗口大小<= (n+1)/2,而n-1是回退n帧的窗口大小。
损坏/丢失数据帧:持续发数据,接收方对数据排序,缺失的数据发送NAK,不能乱序确认。
丢失确认帧:和回退n帧一样,启动定时器,超时重发,接收方重复丢弃。
选择重传需要大量逻辑计算,复杂度,并不是经常使用,实际中常用回退n帧方式。
阅读(4042) | 评论(0) | 转发(0) |