-
网络通信两大协议
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. 链路层 -
网络通信过程简单说明
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. 上网 平常说的开网,就是指公网的网段对路由器开放,你通过公网进行上网 -
客户端和服务器的通信 – 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次,客户端没有应答,服务器关闭连接 -
数据通信的三种模式 – 单工,半双工,全双工
单工:只支持数据在一个方向上传播,即要么收,要么发,比如电视,广播 半双工:数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输; 即在同一时间只可以有一方接受或发送信息,可以实现双向通信。比如对讲机。 全双工:在同一时间即可收数据,也可发数据,比如电话通信 -
长连接,短连接
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:应答字节长度, 然后客户端就会读取该长度数据,无需进行关闭,只有等到客户端关闭时,该套接字才会关闭。
本文详细介绍了网络通信中的两大协议TCP/IP与OSI模型,解释了两者之间的区别与联系,并阐述了不同场景下的通信方式,包括同一网段内的电脑通信、通过集线器与交换机的通信、跨网段通信及网站访问流程等。此外,还讨论了TCP协议中的三次握手与四次挥手过程。

被折叠的 条评论
为什么被折叠?



