OSI七层模型
开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互联模型。该体系结构标准定义了网络互联的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层)。
上三层主要与网络应用相关,负责对用户数据进行编码等操作。
下四层主要是负责网络通讯,负责将用户的数据传递到目的地。
7层应用层 | 提供为应用软件而设的接口,以设置与另一应用软件之间的通信。例如: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。 |
6层表示层 | 把数据转换为能与接收者的系统格式兼容并适合传输的格式。 |
5层会话层 | 负责在数据传输中设置和维护计算机网络中两台计算机之间的通信连接。 |
4层传输层 | 为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议等发送信息。例如:传输控制协议(TCP)等。传输层传送的协议数据单元称为段或报文。 |
3层网络层 | 为传输层提供服务,传送的协议数据单元称为数据包或分组。作用是解决如何使数据包通过各结点传送的问题,即通过路径选择算法(路由)将数据包送到目的地。例如:互联网协议(IP)等。 |
2层数据链路层 | 为网络层提供服务,负责网络寻址、错误侦测和改错。解决两个相邻结点之间的通信问题。当表头和表尾被加至数据包时,会形成帧。数据链表头(DLH)是包含了物理地址和错误侦测及改错的方法。数据链表尾(DLT)是一串指示数据包末端的字符串。例如以太网、无线局域网(Wi-Fi)和通用分组无线服务(GPRS)等。分为两个子层:逻辑链路控制(logic link control,LLC)子层和介质访问控制(media access control,MAC)子层。 |
1层物理层 | 它负责管理计算机通信设备和网络媒体之间的互通。利用传输介质为数据链路层提供物理连接 |
TCP/IP网络分层参考模型
TCP
含义
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在OSI模型中,它完成第四层传输层所指定的功能。用户数据报协议(UDP)是同一层内 另一个重要的传输协议。在因特网协议族中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。
其可靠性表现在2方面,一方面是保证数据包可以按照发送的顺序到达,另外一方面是保证数据包一定程度的正确性。其可靠性的实现则基于2点技术,一点是具有一个CRC校验,这样如果数据包中的某些数据出现错误可以通过该校验和发现;另外一点是每个数据包都有一个序号,这样就能保证数据包的顺序性,如果出现错位的数据包可以请求重发。
应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
(1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
(2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
TCP标示位有6种标示位:
(A)URG:紧急指针(urgent pointer)有效。为1表示某一位需要被优先处理。
(B)ACK:确认序号有效。一般置为1.
(C)PSH:提示接收方应用程序立即从TCP缓冲区取走数据,将报文交给应用层。
(D)RST:对方要求重新建立连接,复位。
(E)SYN:请求建立连接,并在其序列号的字段进行序列号的初始值设定,设置为1。
(F)FIN:希望断开连接。
需要注意的是:
(A)不要将确认序号Ack与标志位中的ACK搞混了。
(B)确认方Ack=发起方Req+1,两端配对。
TCP连接采用三次握手:
客户端发送预连接数据包: 客户端发送一个数据包(报文)给服务端,数据包中的SYN标识位为1。如果SYN为1,则说明为建立连接的数据包。同时,在该数据包中包含一个请求序列号,该序列号也是建立连接的依据。
服务端回复连接确认: 服务端确认可以建立连接(服务端不一定可以建立连接,因为系统中套接字的数量是有限的)的情况下会向客户端发送一个应答数据包。在应答数据包中会将ACK标志位设置为1,表示为服务端应答数据包。同时,在应答数据包中会设置请求序列号和应答序列号的值。
客户端回复连接确认: 最后,客户端再次发送一个连接确认数据包,告诉服务端连接建立成功。
如何传输的可靠性:
TCP在发送数据时都会计算整个数据包的校验和,并存储在包头的校验 和字段中。接收方会按照规则进行计算。
发送:
1.把伪首部、TCP包头和TCP数据分为16为的字,并把TCP包头中的 校验和字段置0
2.用反码加法累加所有16位数字
3.对计算结果去反,将其填充到TCP包头的校验和字段
接收:
1.将所有原码相加,高位叠加,如果全为1则表示数据正确,否则说明 数据有错误。
2.TCP数据包顺序的可靠性是通过请求序列号和应答序列号保证的。在 数据传输中的每个请求都会有一个请求序列号,而在接收方接收到数据 后会发送一个应答序列号,这样发送方就能知道数据是否被正确接收, 而接收方也能知道数据是否出现乱序,从而保证数据包的顺序性。
断开连接:
1、发起方发送一个FIN置位的数据包,用来请求关闭发送方到接收方的连接
2、接收方发送一个应答,ACK标志位为1,确认关闭。此时完成了发起方 到接收方的连接,也即发送方无法再向接收方发送数据,但接收方还可 以 向发送方发送数据。
3、接收方数据传输完成后向发起方发送一个FIN为1的包,表示请求断开 连接
4、发起方回复一个ACK包,确认关闭成功
是全双工通信,因此关闭连接时需要双向关闭连接。