什么是套接字?

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

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

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

socket的位置

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

socket通信过程

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

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

客户端过程

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

服务端过程

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

从TCP角度看socket通信过程

三次握手socket的过程:

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

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

TCP四次挥手的socket过程:

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

参考

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

https://segmentfault.com/a/1190000013712747

总结

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

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

  1. java 中的网络编程(Socket、TCP三次握手四次挥手、TCP/UDP/URL)

    文章目录 前言 一.网络编程概述 二.网络通信要素概述 1.如何实现网络中的主机互相通信 2.网络通信协议 3.IP和端口号 4.InetAddress类 5.网络协议 6.TCP/IP协议簇 7.T ...

  2. 超硬核!!!一篇文章搞定TCP、UDP、Socket、HTTP(详细网络编程内容+现实解释三次握手四次挥手+代码示例)【网络编程 1】

    TCP.UDP.Socket 一天面试的经验: 什么是网络编程 网络编程中两个主要的问题 网络协议是什么 为什么要对网络协议分层 计算机网络体系结构 1 TCP / UDP 1.1 什么是TCP/IP ...

  3. 网络架构,七层协议,三次握手四次挥手,socket套接字简单编程

    一.单机架构 应用领域: 植物大战僵尸 office 二.CS架构 应用领域: QQ 大型网络游戏 计算机发展初期用户去取数据,直接就去主机拿,从这里开始就分出了客户端和服务端. 客户端:用户安装的软 ...

  4. java http 401_服务器返回HTTP响应代码:401,URL:https

    我正在使用Java访问HTTPS站点,该站点以XML格式返回显示内容.我在URL本身中传递了登录凭据.这是代码片段: DocumentBuilderFactory dbf = DocumentBuil ...

  5. 服务器响应401,服务器返回HTTP响应代码:401,URL:https

    我正在使用Java访问HTTPS站点,该站点以XML格式返回显示内容.我在URL本身中传递了登录凭据.这是代码片段: DocumentBuilderFactory dbf = DocumentBuil ...

  6. 三次握手 四次握手 与socket函数的关系

    我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠so ...

  7. 一切皆socket!网络编程:三次握手 四次握手 与socket函数的关系

    转载地址:http://www.cnblogs.com/suntp/p/6434644.html 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与w ...

  8. 随笔 - 58, 文章 - 0, 评论 - 0, 引用 - 0 三次握手 四次握手 与socket函数的关系

    1.网络中进程之间如何通信? 2.Socket是什么? 3.socket的基本操作 3.1.socket()函数 3.2.bind()函数 3.3.listen().connect()函数 3.4.a ...

  9. 逆水寒 各个服务器位置,从商人的角度看逆水寒——服务器选择篇

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 从商人的角度看逆水寒--如何选择服务器 (一)服务器人气 1. 千万别去人少的区(虽然是废话,但还是要说) 服务器人少,意味着收不到装备,组不到队,还TM ...

最新文章

  1. Rosetta | Rosetta简介
  2. 单元测试mock之mockito使用
  3. 利用A、G、DL、P策略来管理网络资源访问权限
  4. RTP之H264封包和解包
  5. 【最短路】【Dijkstra】【图论】最小花费(jzoj 2125)
  6. Android开发中解决自定义弹窗获取不到控件对象的问题
  7. Swing中的并发-使用SwingWorker线程模式
  8. html5飞机发射教程,Javascript学习笔记(13_5) --js事件(飞机发射子弹)
  9. FastStone Capture——轻量级长截屏软件
  10. ABB全新机器人伺服驱动3HAB8101-1DSQC345A 3E031704 3E031712 3E031785 3E032016 3E032176 3E032455 3E034013
  11. 图片按照宽度等比例缩放
  12. 【登录界面】vue、element-ui登录界面模板
  13. 最适合菜鸟的汉诺塔讲解
  14. 恒流源差分放大电路静态分析_多级放大电路以及差分放大电路
  15. 论文阅读之《CrowdPose: Efficient Crowded Scenes Pose Estimation and A new Benchmark》
  16. java Optional操作
  17. Moblin授权中心在台北挂牌开业
  18. 分享72个商务商城PHP源码,总有一款适合你
  19. mysql 中添加和删除字段
  20. MySQL 中出现的字符编码错误 Incorrect string value: ‘\x\x\x\x‘ for column ‘x‘

热门文章

  1. 人工智能TensorFlow工作笔记007---认识张量
  2. SpringCloud工作笔记065---lombok的使用和原理_在开发工具STS_eclipse_Idea中集成lombok
  3. 去除序号(正则表达式with sublime text)
  4. 随想录(学习《许式伟的架构课》)
  5. 一步一步写算法(之哈夫曼树 下)
  6. 一步一步写算法(之n!中末尾零的个数统计)
  7. ios html gif 显示,iOS gif图显示问题
  8. php使用cookie获取浏览记录,php 使用COOKIE制作浏览记录_PHP教程
  9. 大数据中心周边辐射大吗_“一部手机读云南”上线 力争建成国家方志大数据中心西南中心...
  10. linux 命令行 文件管理器,CLEX - 集成命令提示符、“多才多艺”的命令行文件管理器...