TCP/IP协议和三次握手

Posted 走路带_风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP/IP协议和三次握手相关的知识,希望对你有一定的参考价值。

1.背景介绍

    要想了解什么是TCP/IP协议,就要知道什么是网络协议。书本上的定义:网络协议是为计算机网络中进行数据交换而建立的规则、标准或约定的集合。

    中国人之间交流使用汉语,要遵循汉语的语法结构和发音;那如果我们跟英国人交流的话,就要使用英语的语法结构和发音;我们人与人之间交流所用的语言就是一种协议。对于计算机来说,两台机器之间的通信就要制定各种各样的协议,例如:文件传输使用TCP协议,域名系统使用DNS协议。数据根据协议规定的内容进行传输,这样就实现了两台机器之间的通信。

    总的来说:网络协议就是人为规定的一套通信规范,只要双方都遵循这个规范,就能实现交流。

    TCP/IP具体含义:从字面意义上讲,可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。然而多数情况下,它只是利用ip进行通信时所必须用到的协议群的统称。具体来说,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。他们与 TCP 或 IP 的关系紧密,是互联网必不可少的组成部分。TCP/IP 一词泛指这些协议,因此,有时也称 TCP/IP 为网际协议群。

 

2.知识剖析

    TCP/IP协议族中有一个重要的概念是分层,TCP/IP协议按照层次分为以下四层:

    应用层、传输层、网络层、数据链路层。提到协议分层,通常会联想到OSI的七层协议经典架构,但是TCP/IP协议族的结构则稍有不同。如图所示

    TCP/IP协议族按照层次由上到下,层层包装。

(1)最上面的就是应用层了,这里面有http,ftp,等等我们熟悉的协议。

    TCP/IP的分层中,将OSI参考模型中的会话层、表示层和应用层的功能都集中到了应用程序中实现。

    TCP/IP应用的架构绝大多数属于客户端/服务器模型。

应用层的主要应用场景:

    浏览器和服务端之间通信所用的协议是HTTP协议,所传输数据的主要格式为html

    发送电子邮件时用到的协议是SMTP。

    文件传输(FTP)

    远程登录常用TELNET与SSH两种协议。远程登录是指登录到远程的计算机上,使那台计算机上的程序得以运行的一种功能。

    网络管理(SNMP)

(2)第二层则是传输层,著名的TCP和UDP协议就在这个层次。

    传输层最主要的功能是能够让应用程序之间实现通信,并且定义了两种服务质量不同的协议,即:传输控制协议TCP和用户数据报协议UDP。

    TCP协议是一个面向连接的、可靠的协议。它可以保证两端通信主机之间的通信可达。在发送端,它负责把上层传送下来的字节流分成报文段并传递给下层。在接收端,它负责把收到的报文进行重组后递交给上层。TCP协议还要处理端到端的流量控制,以避免缓慢接收的接收方没有足够的缓冲区接收发送方发送的大量数据.

    UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。

    UDP常用在分组数据较少或多播、广播通信以及视频通信等多媒体领域(即时通信)。

(3)第三层是网络层,IP协议就在这里,它负责对数据加上IP地址和其他的数据以确定传输的目标。

    也称作互联网层,是整个TCP/IP协议栈的核心。它的功能是把分组发往目标网络或主机。同时,为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。

    网络层定义了分组格式和协议,即IP协议(Internet Protocol)。另外的还有ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)。

    IP是一种网络层协议,提供的是一种不可靠的服务,它只是尽可能快地把分组从一端送到另一端,但是并不提供任何可靠性保证。同时被TCP和UDP使用。TCP和UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中进行传输。

    ICMP是IP协议的附属协议。IP层用它来与其他主机或路由器交换错误报文和其他重要信息。

    IGMP是Internet组管理协议。它用来把一个UDP数据报多播到多个主机。

(4)第四层是叫数据链路层,也称作网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。链路层为待传送的数据加入一个以太网协议头,并进行CRC编码,为最后的数据传输做准备。

 

3.常见问题

1、TCP/IP协议通信的过程

通信的过程其实就对应着数据装包与拆包的过程。装包的过程,数据发送方每层不断地封装首部,添加一些信息用于传输,确保能传输到目的地。拆包的过程,数据接收方每层不断地拆除首部,得到最终传输的数据。(图例)

每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。在下一层的角度看,从上一层收到的包全部都被认为是本层的数据。

 

2、如何建立TCP/IP连接?

TCP传输控制协议,是一个面向连接的协议。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。所谓三次握手是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建立。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。

TCP报文格式(图)

(1)序列号:Sql序号,用来标识数据包,发起方发送数据时对此进行标记。

(2)确认序号:Ack序号,只有ACK标志位为1时,确认序号字段才有效,ack=Seq+1。

(3)标志位:共6个,即SYN、ACK、PSH、RST、URG、FIN

1)SYN:发起一个请求。        2)ACK:确认序号有效(表示对请求的响应)。

3)URG:紧急指针(urgent pointer)有效。        4)PSH:接收方应该尽快将这个报文交给应用层。

5)RST:重置连接。        6)FIN:释放一个连接。

需要注意的是:                

(A)不要将确认序号Ack与标志位中的ACK搞混了。

(B)确认方ack=发起方Seq+1,两端配对。

第一次握手:客户端发送一个TCP标志位SYN=1,ACK=0的数据包给服务端,并随机会产生一个seq=J.当服务端接收到这个数据后,服务端由SYN=1可知客户端是想要建立连接;

第二次握手:服务端要对客户端的联机请求进行确认,向客户端发送应答号ACK=1、SYN=1        确认号ack=J+1,此值是客户端的序列号加1,还会产生一个随机的序列号seq=K,这样就告诉客户端可以进行连接;

第三次握手:客户端收到数据后检查ack是否为J+1,以及标志位ACK的值是否为1,若为1,则会发送ACK=1、确认号码ack=K+1,告诉服务端,你的请求连接被确认,连接可以建立,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

 

3、为什么要三次握手?

为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

三次握手是在安全可靠的基础上,握手次数最少的方案。两次握手并不能保证可靠性。四次握手又浪费了效率,当然,有的需要更高安全性的地方,是可以有N次握手协议的,但那是特殊情况。

 

4、IP包如何路由至目标地址?

IP包有固定的报文格式,报头有所需要参数。如:源端口、目标端口、确认序号和标志域等。

 

5、详细介绍IP、TCP和DNS。

IP协议:IP协议的作用在于把各种数据包准确无误的传递给对方,其中两个重要的条件是IP地址,和MAC地址。由于IP地址是稀有资源,不可能每个人都拥有一个IP地址,所以我们通常的IP地址是路由器给我们生成的IP地址,路由器里面会记录我们的MAC地址。而MAC地址是全球唯一的,除去人为因素外不可能重复。

TCP协议:如果说IP协议是找到对方的详细地址。那么TCP协议就是把安全的把东西带给对方。各有分工,互不冲突。

按层次分,TCP属于传输层,提供可靠的字节流服务。所谓的字节流服务是指,为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。而可靠的传输服务是指,能够把数据准确可靠地传给对方。总之,TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够确认数据最终是否送达到对方。

DNS:(Domain names System)

和HTTP协议一样是处于应用层的服务,提供域名到IP地址之间的解析服务。互联网之间是通过IP地址通信的,但是IP地址并不符合认得记忆习惯,人喜欢记忆有意义的字词。所以DNS服务就为了解决这个问题而生的。

以上是关于TCP/IP协议和三次握手的主要内容,如果未能解决你的问题,请参考以下文章

重学TCP/IP协议和三次握手四次挥手

TCP3次握手连接协议和4次握手断开连接协议

TCP/IP三次握手四次挥手

TCP/IP协议和HTTP协议

HTTP的三次握手

tcp/ip协议详解!!