什么是socket?
1、七层协议简化为四层:应用层、传输层、网络层、链路层;
2、套接字是应用层和TCP/IP协议族通信间的软件抽象层,将TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用实现进程在网络中的通信;本地进程通信中,进程PID是唯一标识,而网络通信中,PID不唯一容易冲突,而IP地址标示唯一主机,TCP层协议和端口号标示主机的唯一进程,因此,可以用IP地址+协议+端口号来唯一标示网络中的一个进程;
3、socket通信流程:
服务器根据地址类型(ipv4,ipv6)、socket类型、协议创建socket
服务器为socket绑定ip地址和端口号
服务器socket监听端口号请求,随时准备接收客户端发来的连接,这时候服务器的socket并没有被打开
客户端创建socket
客户端打开socket,根据服务器ip地址和端口号试图连接服务器socket
服务器socket接收到客户端socket请求,被动打开,开始接收客户端请求,直到客户端返回连接信息。这时候socket进入阻塞状态,所谓阻塞即accept()方法一直到客户端返回连接信息后才返回,开始接收下一个客户端谅解请求
客户端连接成功,向服务器发送连接状态信息
服务器accept方法返回,连接成功
客户端向socket写入信息
服务器读取信息
客户端关闭
服务器端关闭
4、TCP/IP三次握手建立可靠连接:
第一次握手:客户端尝试连接服务器,向服务器发送syn包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入SYN_SEND状态等待服务器确认
第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
最新文章
- 【ios开发】使用自定义的TableViewCell
- SharePoint—用REST方式访问列表
- C#位操作符
- 29 个 PHP 的 Excel 处理类
- Eclipse里初次使用Maven注意问题
- Chapter 3. Installing Gradle 安装gradle
- mysql的高级用法
- 如何使用ssh-keygen生成key
- Windows Azure 网站 (WAWS) 和中间证书
- 设计模式-GoF23
- Linux开机启动(bootstrap)上
- Intellij IDEA 2017 详细图文教程之概述
- 2018-2019-1 20165231 实现mypwd(选做)
- Windows上IOCP Socket事件模型管理
- Pycharm在运行过程中,查看每个变量的方法(show variables)跟终端一样显示变量
- Java synchronized 线程同步
- 关于c++ template的branching和Recursion的一段很好的描述
- LeetCode 696 Count Binary Substrings 解题报告
- centos静态绑定IP地址
- node.js中对Event Loop事件循环的理解