【网络】运输层介绍以及主要协议(一)TCP

写在前面:

        上一次的介绍是关于网络层中的IP协议;从网络层来说,通信的两端是两台主机。IP数据报明确的表明了两端的两台主机的IP地址,这样看起来这两台主机就可以直接进行通信。但是这种说法是不完全正确的,在整个计算机网络中,真正进行通信的是这两台主机上的进程。所以,严格的来说两台主机进行通信就是两台主机中的应用进程进行通信。IP协议只是将分组发送到了目的主机,但是这个分组仍然停留在网络层,并没有交付到主机中的应用进程。那么,本篇就引入到运输层,介绍运输层的功能以及所涉及到的协议。

目录

一、运输层概述

     1、运输层的功能

     2、分用和复用

    3、端口号和套接字

二、传输层中涉及到的两个主要协议

1、TCP协议

2、UDP协议

三、TCP协议

(一)TCP报文段的首部格式

(二)TCP的主要特点

(三)分别介绍TCP的主要三个特点:面向连接的可靠的数据交流服务

 1、面向连接的——三次握手、四次挥手

2、可靠的

3、字节流服务(抽刀断水水更流)


一、运输层概述

        运输层是整个网络体系结构中的关键层次之一。从通信和信息处理的角度来看,运输层向它上面的应用层提供通信服务,它是属于面向通信部分的最高层,同时也是用户功能中的最底层。

     1、运输层的功能

     (1)运输层提供的是应用进程间的逻辑通信;

     (2)运输层要对收到的报文进行差错检验。在IP层只对IP数据报的首部进行差错检验;

       主要指出,运输层向高层用户屏蔽了下面的网络核心细节,它使应用进程看见的就是好像两个运输层实体之间有一条端到端的逻辑通信信道,但是这条逻辑通信信道会因为运输层使用的不同协议而有很大的区别;

     2、分用和复用

    (1)分用:运输层从IP层收到发送给各个应用进程的数据后,必须分别交付给指明的各应用进程中,这就是分用;也就是说接收方的运输层在剥去报文的首部后能够将这些数据正确交付目的应用进程;

    (2)复用:应用层所有的应用进程都可以通过运输层再传送到IP层,这就是复用;也就是说在发送方不同的应用进程都可以使用同一个传输层协议传送数据(加上适当的首部);

    3、端口号和套接字

(1) 端口号:本篇提到的端口指的是软件端口。是应用层的各种协议进程与运输实体进行层间交互的一种地址;

   TCP/IP的运输层使用一个16位端口号来标识的一个端口。端口号只具有本地意义,它只是为了标志本计算机应用层中的各个进程在和运输层交互时的层间接口。范围是0~65535;

           表1         服务器端常用的熟知端口号

应用程序

FTP

TELNET

SMTP

DNS

TFTP

HTTP

SNMP

SNMP(trap)

HTTPS

熟知端口号

21

23

25

53

69

80

161

162

443

  (2)套接字:IP地址+端口号;

二、传输层中涉及到的两个主要协议

TCP/IP运输层的两个主要协议都是互联网的正式标准,即为:

1、TCP协议

  1. 面向连接的,可靠的字节流服务;

2、UDP协议

  1. 无连接的,不可靠的数据报服务;

【网络】运输层介绍以及主要协议(一)TCP

三、TCP协议

(一)TCP报文段的首部格式

【网络】运输层介绍以及主要协议(一)TCP

本端端口号和目的端端口号:各占2字节,分别写入源端口和目的端口号;

32位序号:在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。序号使用的是mod(2^32)运算。第一个报文段系统会生成一个随机值,后续报文段的序号是报文段携带的数据的第一个字节在整个字节流中的偏移量+生成的随机值;(排序 不乱序)

32位确认号:由接收数据的一方填充,接收到的报文段的序号值+1,;对接收到的报文段的确人;若确认号 = N,则表示到序号N-1为止的所有数据都以正确收到;

4Head_len指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。实际上指出的是TCP首部长度;确定TCP的报头最大值为15个四字节,即60字节;

紧急URG当URG为1是时,表明紧急指针有效;它告诉系统此报文段中有紧急数据,应尽快传送,而不是按照原来的排队顺序来传送。

确认ACK:仅当ACK的值为1时,确认好字段才有效。当ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须吧ACK置1.

推送PSH当两个应用进程进行交互通讯时,有时在一端的应用进程希望再键入一个命令后立即就能够收到对方的响应。住在这种情况下,TCP就可以使用推送操作。

复位RST当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),应立即释放链接,然后再重新建立运输连接。

同步SYN在连接建立时用来同步序号。当SYN=1时而ACK=0时,表明这是一个连接请求报文段;对方若同意连接,则应在响应的报文段中使SYN=1和ACK=1,。因此,SYN等于1表示这是一个连接请求或连接接受的报文段。

终止FIN用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已经发送完毕,并要求释放链接。

窗口:占2字节。窗口指的是发送本报文段的一方的接收窗口(而不是自己的发送窗口);窗口值作为接收方让发送方设置其发送窗口的依据;窗口字段明确指出了现在允许对方发送的数据量。窗口值经常是在动态变化着的;

16位校验和:发送方填充  接收方通过CRC算法根据校验和对数据进行校验(TCP);

紧急指针:仅仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数;

(二)TCP的主要特点

  1. 面向连接的传输层协议;
  2. TCP提供的是可靠交付的功能;
  3. 面向字节流;
  4. 每一条TCP连接只能有两个端点,每条TCP连接只能是点对点的;
  5. TCP提供的是全双工通信;TCP允许通信双方的应用进程在任何时候都能发送数据。TCP的两端设有发送缓冲区和接收缓冲区,用来临时存放双向通信的数据。

(三)分别介绍TCP的主要三个特点:面向连接的可靠的数据交流服务

 1、面向连接的——三次握手、四次挥手

(1)两端通讯之前,必须先建立连接;

(2)连接一旦建立,两端交互过程在这一连接上完成,无需重新建立连接,知道关闭连接为止;

(3)通讯完成之后,需要断开连接,释放服务器的资源;

(4)操作系统为我们维护连接,所以内和需要为连接分配相应的资源;

(5)一个连接对于服务器而言,只能为一个客户端服务,从而造成服务器性能有待优化;

 ***TCP的连接过程==》三次握手

【网络】运输层介绍以及主要协议(一)TCP

在TCP建立连接的时候必须解决这样几个问题:一是要使双方都能够确定的知道对方的存在;二是要允许双方协商一些参数(例如最大窗口值,是否使用窗口扩大选项等);三是能够对运输实体资源进行分配;

理解三次握手建立连接的含义:

第一次握手:客户端发送一个请求连接的报文给服务器端,告诉服务器我客户端安要和它进行连接,发送的数据报中将SYN标识为你置为1;客户端进入到SYN_SEND状态,等待服务器确认连接;

第二次握手:服务器接收到客户端的请求连接报文后,通过数据报中的SYN=1知道客户端要和他进行连接。服务器就对该连接进行处理,给客户端发一个确认请求连接的报文段,然后进入到SYN_RECV状态。

第三次握手:客户端收到确认后,检查收获的确认连接报文段中的ACK,ack,如果检查都正确,客户端将标志位ACK置为1,并将数据包发送给服务器端。服务器端对发过来的数据包进行检验,如果正确则连接建立成功,两端都进入到 ESTAB_LISHED状态,完成三次握手。

理解SYN攻击:

在三次握手的过程中,服务器端发送SYN-ACK之后,收到客户端的ACK确认之前的连接称之为办理按揭,此时,服务器处于SYN_RECV状态,当收到ACK后,服务器就会进入到ESTAB_LISHED状态。SYN供给是客户端在短时间内伪造大量不存在的IP地址,并向服务器端不断地发送SYN包,服务器回复确认包,并等待客户端的确认,由于源地址是不存在的,因此服务器需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而就会造成网络堵塞甚至系统瘫痪。

***TCP的释放过程==》四次挥手

【网络】运输层介绍以及主要协议(一)TCP

理解四次挥手的含义:

         第一次挥手:客户端发送一个断开连接的数据包FIN,用来断开他到服务器的数据传送,客户端进入到FIN_WAIT_1状态。

         第二次挥手:当服务其收到客户端的断开连接时,发送一个ACK给客户端,告诉客户端“我知道你要和我断开连接了”,然后服务器进入到CLOSE_WAIT状态。此时客户端收到ACK之后,进入到FIN_WAIT_2的状态。

         第三次挥手:服务器发送一个FIN到客户端,用来断开服务器到客户端的数据传送,服务器进入到LAST_ACK状态。

         第四次挥手:客户端收到服务器的FIN后,客户端进入到TIME_WAIT状态,紧接着发送一个ACK给服务器,服务器进入到CLOSED状态。完成四次挥手。

TIME_WAIT状态的含义:为什么要等待2MSL;

(1)保证迟来的数据能被识别并丢弃;

(2)保证可靠的终止TCP连接;

***拥塞控制

(1)慢启动:的当主机开始发送数据时,并不清楚网络的负荷情况,所以如果立即把大量的数据字节注入到网络,那么就有可能引起网络发生拥塞。经检验,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值;

(2)拥塞避免:让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd的值加1,而不是像慢开始那样加倍增长;即就是加法增大;

(3)快速重传:发送方连续接收但三个相同的确认报文段,此刻,网络拥塞

                              将丢失的报文段立即重传,无需等待超时时间到达

                               将慢启动门限设置为原来的一半,重新开始慢启动;

(4)快速恢复:发送方连续接收但三个相同的确认报文段,此刻,网络拥塞

                               将丢失的报文段立即重传,无需等待超时时间到达

                               将慢启动门限设置为原来的一半,直接开始拥塞避免;

【网络】运输层介绍以及主要协议(一)TCP

2、可靠的

传输数据的可靠性:(与协议控制有关)TCP协议报头中做控制

(1)数据是否能到达对端;(32位确认号,超时重传,滑动窗口,拥塞控制)

(2)数据到达对端是否会乱序;(32位序号实现)

(3)数据是否被修改即失真 (CRC    16位校验和 )

3、字节流服务(抽刀断水水更流)

(1)send的次数和接收方recv的次数没有必然联系(受当前的程序和网络环境影响)

(2)如果发送方发送一次数据,接收方一次未接收完成,数据不会丢失;数据会被缓存在接收缓冲区中。(Tcpdump抓包工具)

【网络】运输层介绍以及主要协议(一)TCP

参考书籍:《计算机网络》第7版 谢希仁著

总结:

1、简述运输层的主要功能

2、理解分用和复用的意义

3、区别套接字和端口号

4、TCP协议的主要内容