socket bufferedinputstream通信读取不到服务器返回的响应_TCP角度看socket通信过程,socket怎么表示三次握手,四次挥手...
什么是套接字?
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的过程:
- 服务器调用 socket()、bind()、listen() 完成初始化后,调用 accept() 阻塞等待;
- 客户端 Socket 对象调用 connect() 向服务器发送了一个 SYN 并阻塞;
- 服务器完成了第一次握手,即发送 SYN 和 ACK 应答;
- 客户端收到服务端发送的应答之后,从 connect() 返回,再发送一个 ACK 给服务器;
- 服务器 Socket 对象接收客户端第三次握手 ACK 确认,此时服务端从 accept() 返回,建立连接。
接下来就是两个端的连接对象互相收发数据。
TCP四次挥手的socket过程:
- 某个应用进程调用 close() 主动关闭,发送一个 FIN;
- 另一端接收到 FIN 后被动执行关闭,并发送 ACK 确认;
- 之后被动执行关闭的应用进程调用 close() 关闭 Socket,并也发送一个 FIN;
- 接收到这个 FIN 的一端向另一端 ACK 确认。
参考
源理君参考了这篇文章的思路。
https://segmentfault.com/a/1190000013712747
总结
socket在网络中的应用非常多变,但是万变不离其宗,上面讲述的原理,是他们运行的基本原则。
socket bufferedinputstream通信读取不到服务器返回的响应_TCP角度看socket通信过程,socket怎么表示三次握手,四次挥手...相关推荐
- java 中的网络编程(Socket、TCP三次握手四次挥手、TCP/UDP/URL)
文章目录 前言 一.网络编程概述 二.网络通信要素概述 1.如何实现网络中的主机互相通信 2.网络通信协议 3.IP和端口号 4.InetAddress类 5.网络协议 6.TCP/IP协议簇 7.T ...
- 超硬核!!!一篇文章搞定TCP、UDP、Socket、HTTP(详细网络编程内容+现实解释三次握手四次挥手+代码示例)【网络编程 1】
TCP.UDP.Socket 一天面试的经验: 什么是网络编程 网络编程中两个主要的问题 网络协议是什么 为什么要对网络协议分层 计算机网络体系结构 1 TCP / UDP 1.1 什么是TCP/IP ...
- 网络架构,七层协议,三次握手四次挥手,socket套接字简单编程
一.单机架构 应用领域: 植物大战僵尸 office 二.CS架构 应用领域: QQ 大型网络游戏 计算机发展初期用户去取数据,直接就去主机拿,从这里开始就分出了客户端和服务端. 客户端:用户安装的软 ...
- java http 401_服务器返回HTTP响应代码:401,URL:https
我正在使用Java访问HTTPS站点,该站点以XML格式返回显示内容.我在URL本身中传递了登录凭据.这是代码片段: DocumentBuilderFactory dbf = DocumentBuil ...
- 服务器响应401,服务器返回HTTP响应代码:401,URL:https
我正在使用Java访问HTTPS站点,该站点以XML格式返回显示内容.我在URL本身中传递了登录凭据.这是代码片段: DocumentBuilderFactory dbf = DocumentBuil ...
- 三次握手 四次握手 与socket函数的关系
我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠so ...
- 一切皆socket!网络编程:三次握手 四次握手 与socket函数的关系
转载地址:http://www.cnblogs.com/suntp/p/6434644.html 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与w ...
- 随笔 - 58, 文章 - 0, 评论 - 0, 引用 - 0 三次握手 四次握手 与socket函数的关系
1.网络中进程之间如何通信? 2.Socket是什么? 3.socket的基本操作 3.1.socket()函数 3.2.bind()函数 3.3.listen().connect()函数 3.4.a ...
- 逆水寒 各个服务器位置,从商人的角度看逆水寒——服务器选择篇
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 从商人的角度看逆水寒--如何选择服务器 (一)服务器人气 1. 千万别去人少的区(虽然是废话,但还是要说) 服务器人少,意味着收不到装备,组不到队,还TM ...
最新文章
- Rosetta | Rosetta简介
- 单元测试mock之mockito使用
- 利用A、G、DL、P策略来管理网络资源访问权限
- RTP之H264封包和解包
- 【最短路】【Dijkstra】【图论】最小花费(jzoj 2125)
- Android开发中解决自定义弹窗获取不到控件对象的问题
- Swing中的并发-使用SwingWorker线程模式
- html5飞机发射教程,Javascript学习笔记(13_5) --js事件(飞机发射子弹)
- FastStone Capture——轻量级长截屏软件
- ABB全新机器人伺服驱动3HAB8101-1DSQC345A 3E031704 3E031712 3E031785 3E032016 3E032176 3E032455 3E034013
- 图片按照宽度等比例缩放
- 【登录界面】vue、element-ui登录界面模板
- 最适合菜鸟的汉诺塔讲解
- 恒流源差分放大电路静态分析_多级放大电路以及差分放大电路
- 论文阅读之《CrowdPose: Efficient Crowded Scenes Pose Estimation and A new Benchmark》
- java Optional操作
- Moblin授权中心在台北挂牌开业
- 分享72个商务商城PHP源码,总有一款适合你
- mysql 中添加和删除字段
- MySQL 中出现的字符编码错误 Incorrect string value: ‘\x\x\x\x‘ for column ‘x‘
热门文章
- 人工智能TensorFlow工作笔记007---认识张量
- SpringCloud工作笔记065---lombok的使用和原理_在开发工具STS_eclipse_Idea中集成lombok
- 去除序号(正则表达式with sublime text)
- 随想录(学习《许式伟的架构课》)
- 一步一步写算法(之哈夫曼树 下)
- 一步一步写算法(之n!中末尾零的个数统计)
- ios html gif 显示,iOS gif图显示问题
- php使用cookie获取浏览记录,php 使用COOKIE制作浏览记录_PHP教程
- 大数据中心周边辐射大吗_“一部手机读云南”上线 力争建成国家方志大数据中心西南中心...
- linux 命令行 文件管理器,CLEX - 集成命令提示符、“多才多艺”的命令行文件管理器...