网络通信原理简介--tcp/ip协议,tcp三次握手四次挥手,长连接和短连接

本文详细介绍了网络通信中的两大协议TCP/IP与OSI模型,解释了两者之间的区别与联系,并阐述了不同场景下的通信方式,包括同一网段内的电脑通信、通过集线器与交换机的通信、跨网段通信及网站访问流程等。此外,还讨论了TCP协议中的三次握手与四次挥手过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 网络通信两大协议

     1. tcp/ip 协议
     	1. 数据                     + data
     	2. 应用层                   + APP
     	3. 传输层                   + tcp/udp套接字 + port(传输工具)
     	4. 网络层                   + ip(网络地址)
     	5. 链路层                   + MAC地址(物理地址)
     2. osi 协议
     	1. 数据
     	2. 应用层
     	3. 表示层
     	4. 会话层
     	5. 传输层
     	6. 网络层
     	7. 数据链路层
     	8. 物理层
     说明: 
     	osi协议中 2. 应用层,3. 表示层, 4. 会话层 相当于tcp/ip协议中的 2. 应用层
     	osi协议中 7. 数据链路层,8. 物理层 相当于tcp/ip协议中的 5. 链路层
    
  2. 网络通信过程简单说明

     1. 两台电脑通信
     两台电脑的ip地址在同一网段内,例如 一台为192.168.1.1另一台为192.168.1.2则可以进行通信;
     设置ip时需要设置子网掩码,确定主机号是1位还是2位
     子网掩码255.255.0.0,主机号2位;子网掩码255.255.255.0,主机号1位
     
     2. 三台及以上电脑通信 -- 集线器
     集线器,只能广播的方式发送数据。
     即如果集线器接收到来自A电脑的数据本来是想转发给B电脑,
     如果此时它还连接着另外两台电脑C、D,那么它会把这个数据给每个电脑都发送一份,
     因此会导致网络拥堵。
     
     3. 三台及以上电脑通信 -- 交换机
     交换机,先进行广播,可以发送ff.ff.ff.ff.ff.ff(默认的Mac地址),获取ip方Mac地址,
     然后进行通信,称之为ARP协议,先广播,再单播
     
     4. 不同网段下电脑进行通信 -- 路由器
     不同网段是指 A网络:192.168.1.1 和 B网络:192.168.2.1;
     路由器,即网关,有两块网卡,A网络下电脑无法直接发给B网络下电脑,
     A可以先发送给网关A网卡,网关内部处理,网关B网卡发送给B网络下电脑
     
     5. 访问网站(较复杂的通信过程)
     网站中输入网址,比如www.baidu.com
     将网址发送给DNS服务器,也就是DNS服务器的ip,过程中的Mac地址在不停的变化。
     DNS解析网址后,获得对应服务器的ip,再通过ip访问网站服务器。
     三次握手成功后,收发数据,然后关闭连接,四次挥手。
     
     6. 上网
     平常说的开网,就是指公网的网段对路由器开放,你通过公网进行上网
    
  3. 客户端和服务器的通信 – TCP三次握手,四次挥手的过程

    TCP三次握手,四次挥手图解

     1. 建立连接(3次握手)
     	1. 客户端向服务器发出请求SYN=1,seq=x(询问服务器是否做好准备)
     	   connect(阻塞)(建立连接时发出请求) -- 客户端
     	2. 服务器向客户端进行应答ACK=1,ack=x+1(回复已经做好准备)
     	   同时向客户端发送请求SYN=1,seq=y(询问客户端是否做好准备)
     	   listen accept(阻塞)(接收到请求,accept会回复请求,并请求建立连接) -- 服务器			   			   
     	3. 客户端向服务器返回应答ACK=1,seq=x+1,ack=y+1(客户端回复服务器准备好了)
     		connect(返回)(接收到回复请求后,解阻塞,并回复链接请求) -- 客户端   
     		accept(接收到客户端同意链接请求,accept解阻塞,生成服务客户端套接字) -- 服务器
     	4. 收发数据
     	
     2. 关闭连接(4次挥手)
     		1. 客户端调用close(),向服务器发送FIN=1,seq=u,告诉服务端要关闭发送
     		2. 服务器回复客户端收到,并关闭接受通道,ACK=1,seq=v,ack=u+1
     		3. 服务器调用close(),告诉客户端要关闭发送通道,可能会带一些数据,所以seq=w,
     		   FIN=1,seq=w,ACK=1,ack=u+1
     		4. 客户端回复服务器收到,并关闭接受通道,ACK=1,ack= w+1,seq=u+1
     		
     3. 重点理解
     	1. Q:为什么握手时可以将服务器向客户端的应答ACK,向客户端的请求SYN合并成一步,
     	      而挥手时不行?
     	   A:握手时,服务器执行到accept函数时,应答客户端的请求,并向客户端发出请求,
     	   	  这两步之间,accept函数正在阻塞中,没有可以执行的其他步骤;
     	   	  而挥手时,客户端调用close函数时,发出FIN请求,服务器会立刻应答关闭接收通道,
     	   	  但是到服务器执行自身close函数之间,可能会有其他操作,代码资源可能并没有立即释放。
     	   	  
     	2. Q:为什么是客户端先调用close函数?
     	   A:客户端先调用close函数,服务器先应答,之后调用close时,会同样想向客户端发送请求;
     	     但是服务器不能确定客户端是否接收到,因此在一段时间内没有收到应答,会重新发送请求,超时重发;
     	     因此,客户端应答之后,要确认服务器是否接收到信息,因此要等待一段时间,来接收服务器超时重发的信息;
     	     等待的这段时间的长度是2MSL
     	     如果先调用的是服务器的close函数,服务器就会等待2MSL时长,服务器的端口资源就会2MSL后才释放;
     	     而客户端的端口是随机产生的,因此不会产生影响
     	     
          3. Q:如果建立连接后,客户端发生故障,服务器怎么办?
             A:TCP有一个保活计时器,服务器每次收到客户端的请求后都会重置该计时器;
                该计时器设置时长一般为2小时,2小时内客户端没有数据发出,之后服务器会发送探测报文给客户端;
                每隔75s发送一次报文,连续10次,客户端没有应答,服务器关闭连接
    
  4. 数据通信的三种模式 – 单工,半双工,全双工

     单工:只支持数据在一个方向上传播,即要么收,要么发,比如电视,广播
     半双工:数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输;
            即在同一时间只可以有一方接受或发送信息,可以实现双向通信。比如对讲机。
     全双工:在同一时间即可收数据,也可发数据,比如电话通信
    
  5. 长连接,短连接

     1. 短链接 -- 只进行一次读写操作
     	1. 客户端向服务器进行三次握手
     	2. 客户端请求数据,服务器发送数据
     	3. 一次读写完成,进行close操作
     	4. 如果是传输其他数据,重新建立新的链接
    
     2. 长链接 -- 可以多次发送数据
     	1. 客户端向服务器进行三次握手
     	2. 客户端请求数据,服务器发送数据
     	3. 客户端请求数据,服务器发送数据
     		...
     	4. 操作结束后,client发送关闭请求
     	5. 是链接建立后,可以多次发送数据
    
     3. 长/短连接的优/缺点
        长连接:
     	1. 优:长链接可以省去很多TCP建立和关闭的操作,减少浪费,节约时间。
     	2. 缺:客户端链接越来越多,server会性能下降。
     		  解决方案:1. 关闭一些长时间没有读写的链接;
     		           2. 如果条件允许,限制客户端的最大连接数。
    
     	短连接
     	1. 优:短连接对于服务器来说都是有效链接,服务器管理起来较为简单。
     	2. 缺:客户端请求频繁,将在TCP的建立和关闭的操作上浪费时间和带宽。
    
     4. 长/短连接的应用场景
     	1. 长链接用于操作频繁,点对点的通讯,而且连接数不能太多,例如数据库的链接
     	2. 连接数多,但每个链接无需频繁操作,使用短连接,例如web网站的http服务
    
     5. 总结
     	1. 使用短连接,就是在每次传输完数据后,对accept创建的新的套接字关闭。
     	2. 使用长链接就是,在应答开头的时候加上Content-Length:应答字节长度,
     	 然后客户端就会读取该长度数据,无需进行关闭,只有等到客户端关闭时,该套接字才会关闭。
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值