socket bufferedinputstream通信读取不到服务器返回的响应_TCP角度看socket通信过程,socket怎么表示三次握手,四次挥手...

本文深入浅出地介绍了套接字的概念及其在网络通信中的作用。解释了套接字如何作为抽象层,简化TCP/IP协议栈的操作,使应用层能够轻松实现进程间的通信。并通过TCP时序图展示了客户端和服务端的连接建立与数据传输过程。

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

什么是套接字?

socket 的中文翻译过来就是“套接字”。套接字是什么,它的英文含义:插座。

Socket 就像一个电话插座,负责连通两端的电话,进行点对点通信,让电话可以进行通信,端口就像插座上的孔,端口不能同时被其他进程占用。而我们建立连接就像把插头插在这个插座上,创建一个 Socket 实例开始监听后,这个电话插座就时刻监听着消息的传入,谁拨通我这个“IP 地址和端口”,我就接通谁。

实际上,Socket 是在应用层和传输层之间的一个抽象层,它把 TCP/IP 层复杂的操作抽象为几个简单的接口,供应用层调用实现进程在网络中的通信。Socket 起源于 UNIX,在 UNIX 一切皆文件的思想下,进程间通信就被冠名为文件描述符(file descriptor),Socket 是一种“打开—读/写—关闭”模式的实现,服务器和客户端各自维护一个“文件”,在建立连接打开后,可以向文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。

socket的位置

99216b7c46675f65c20084c5e43179c2.png

从图中我们可以看出,socket其实是一层抽象层,将协议抽象层一层接口对外提供服务。

socket通信过程

Socket 保证了不同计算机之间的通信,也就是网络通信。对于网站,通信模型是服务器与客户端之间的通信。两端都建立了一个 Socket 对象,然后通过 Socket 对象对数据进行传输。通常服务器处于一个无限循环,等待客户端的连接。

一图胜千言,下面是面向连接的 TCP 时序图

548fd5a0a909d47af3271df3fa81c066.png

客户端过程

客户端的过程比较简单,创建 Socket,连接服务器,将 Socket 与远程主机连接(注意:只有 TCP 才有“连接”的概念,一些 Socket 比如 UDP、ICMP 和 ARP 没有“连接”的概念),发送数据,读取响应数据,直到数据交换完毕,关闭连接,结束 TCP 对话。

服务端过程

服务端先初始化 Socket,建立流式套接字,与本机地址及端口进行绑定,然后通知 TCP,准备好接收连接,调用 accept() 阻塞,等待来自客户端的连接。如果这时客户端与服务器建立了连接,客户端发送数据请求,服务器接收请求并处理请求,然后把响应数据发送给客户端,客户端读取数据,直到数据交换完毕。最后关闭连接,交互结束。

从TCP角度看socket通信过程

三次握手socket的过程:

0c4f55d13f8d96da33613b86b4b61638.png
  1. 服务器调用 socket()、bind()、listen() 完成初始化后,调用 accept() 阻塞等待;
  2. 客户端 Socket 对象调用 connect() 向服务器发送了一个 SYN 并阻塞;
  3. 服务器完成了第一次握手,即发送 SYN 和 ACK 应答;
  4. 客户端收到服务端发送的应答之后,从 connect() 返回,再发送一个 ACK 给服务器;
  5. 服务器 Socket 对象接收客户端第三次握手 ACK 确认,此时服务端从 accept() 返回,建立连接。

接下来就是两个端的连接对象互相收发数据。

TCP四次挥手的socket过程:

c83ea91adf2bf9f8524f6c5639446d1c.png
  1. 某个应用进程调用 close() 主动关闭,发送一个 FIN;
  2. 另一端接收到 FIN 后被动执行关闭,并发送 ACK 确认;
  3. 之后被动执行关闭的应用进程调用 close() 关闭 Socket,并也发送一个 FIN;
  4. 接收到这个 FIN 的一端向另一端 ACK 确认。

参考

源理君参考了这篇文章的思路。

https://segmentfault.com/a/1190000013712747

总结

socket在网络中的应用非常多变,但是万变不离其宗,上面讲述的原理,是他们运行的基本原则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值