网络通讯协议——TCP/IP协议

TCP/IP协议

1.什么是TCP/IP协议

1.1,TCP/IP传输协议,即传输控制/网络协议,也叫作网络通讯协议。它是在网络的使用中的最基本的通信协议。TCP/IP传输协议对互联网中各部分进行通信的标准和方法进行了规定。并且,TCP/IP传输协议是保证网络数据信息及时、完整传输的两个重要的协议。TCP/IP传输协议是严格来说是一个四层的体系结构,应用层、传输层、网络层和数据链路层都包含其中。

2.组成

1.2.TCP/IP协议在一定程度上参考了OSI的体系结构。OSI模型共有七层,从下到上分别是物理层、数据链路层、网络层、运输层、会话层、表示层和应用层。但是这显然是有些复杂的,所以在TCP/IP协议中,它们被简化为了四个层次。
四个层次分别为:

  1. 应用层:应用层是TCP/IP协议的第一层,是直接为应用进程提供服务的。其中Http协议请求也是在这一层进行的。
  2. 传输控制层:作为TCP/IP协议的第二层,传输控制层在整个TCP/IP协议中起到了中流砥柱的作用。且在传输控制层中,TCP和UDP也同样起到了中流砥柱的作用。
  3. 网络层:在TCP/IP协议中的位于第三层。在TCP/IP协议中网络层可以进行网络连接的建立和终止以及IP地址的寻找等功能
  4. 网络接口层:在TCP/IP协议中,网络接口层位于第四层。由于网络接口层兼并了物理层和数据链路层所以,网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路。

TCP特点:面向连接,可靠的传输协议

1.为什么是面向连接?因为在传输控制层中tcp协议经历三次握手后,双方就会建立连接,同时开辟资源为对方服务。
2.为什么是可靠的。因为在三次握手中确认机制是可靠的。经历三次握手后确认可靠之后,才能传输数据,传输完后,也会进行四次挥手

下面是如何进行三次握手的。

网络通讯协议——TCP/IP协议_第1张图片

三次握手

所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。

  1. 第一次握手::Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
  2. 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
  3. 第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

简而言之,就是Client和Server建立连接时,client发送数据给server,必须先确定server能否正常联通,所以发送一个包过去,server接收到包,但是client不知道你有没有接到我的信息,所以server回一个包告诉client代表我接受到了,让client知道它可以联通,同时server此时也需要知道我发送的包client是否接到了,于是client再一次回一个包,代表自己也接收到了信息。确保双方联通之后,双方就可以开始传输数据了。

四次挥手

所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。
网络通讯协议——TCP/IP协议_第2张图片

  1. 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
  2. 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
  3. 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
  4. 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

为什么建立连接是三次握手,而关闭连接却是四次挥手呢?

这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。

演示三次握手 四次挥手

首先我们在linux系统下,保证自己的网络能联通,即能ping通百度即可

ping www.baidu.com

使用命令:curl www.baidu.com
成功后会返回百度的界面,这里我们已经进行了完整的通信的过程–tcp协议的三次握手和四次挥手了。
网络通讯协议——TCP/IP协议_第3张图片
为了更加清晰的了解三次握手和四次挥手,这里我们进行抓包操作。
一,输入命令:tcpdump -nn -i ens33 port 80
ens33:为你网卡,输入ipconfig可以查看
80:百度的端口号
输入之后得到如下界面,这里在等待申请访问80端口
在这里插入图片描述
二,另起一个服务开始请求百度,myLinux,输入命令:curl www.baidu.com
网络通讯协议——TCP/IP协议_第4张图片
这时候我们看到之前的请求被抓到了,期间从请求到响应结束经历的三次握手和四次挥手以及传输数据的过程如下图。

网络通讯协议——TCP/IP协议_第5张图片

HTTP协议

HTTP协议简介:

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统

主要特点

1.HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

2.HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。

3.HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

以下图表展示了HTTP协议通信流程
网络通讯协议——TCP/IP协议_第6张图片

你可能感兴趣的:(#java学习笔记,网络,网络协议)