标签:网络协议
一:网络分层
为什么要对网络进行分层?
双方通信时共同遵循规范,由于这个过程非常复杂,所以对各个部分进行分层. 各分层有对应的协议,各司其职. 本层的改变不影响全局的改变.每一个层次只需利用提供的接口向上输出.
网络层: IPV4 , IPV6
传输层: TCP/UDP 传输控制, 提供16为的端口号.
二: 传输层
1)端口号
纵所周知,服务器端的端口号往往是被动打开,也被称为监听端,服务器端.
端口号(0-1023) 任何其他进程不能使用,永久分配给某应用程序使用. 是有INAN分配.
从1024-41951 叫注册端口. 非常流行的服务会占用某个服务端口.如mysql 默认占用的是3306端口.
从41952- 临时使用动态端口,或者私有端口.这个端口范围是可以通过调节内核参数 来实现.
cat /proc/sys/net/ipv4/ip_local_port_range: 32768 61000 此处有两个端口,表示可以作为临时端口的起始数字和结束数字.对于遇到大量的需要占用临时接口的应用程序需要调整此接口.
2)TCP :传输控制协议
目前互联网95%都是tcp传输控制协议 ; sctp为tcp的升级版.
TCP的层次功能. 1)连接的建立: 2)数据打包成段: IP 打包成段最大的数据报文是65535 , 老的路由器器只有1550以下. 3)校验和: 检查数据报文发送过程中是否出现了错误. 4)确认: 报文确认. 5)超时机制: 6)排序机制: 为了接收方可以确认和连接数据. 7)流量控制: 要有一个缓冲区发送缓存和接受缓存. 滑动窗口算法, 8)拥塞算法: 慢启动,从少到多进行发送.
3)TCP 的有限状态机
三次握手,四次断开.
第一次握手:建立连接时,主机A发送SYN包(syn=m)到服务器,并进入SYN_SEND状态,等待主机B确认 第二次握手:主机B收到SYN包,必须确认主机A的SYN(ACK=m+1),同时自己也发送一个SYN包(SYN=n),即SYN+ACK包,此时主机B进入SYN_RECV状态 第三次握手:主机A收到主机B的SYN+ACK包,向主机B发送确认包ACK(ACK=n+1),此包发送完毕,主机A和主机B进入ESTABLISHED状态,完成三次握手
当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1 由主机B端再提出反方向的关闭请求,将FIN置1 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束
三:套接字
套接字从本质上讲是一个设备. ip+端口 绑定在某个服务上.
四:socket
主要用于不同主机间的进程间通信.
domain(识别sockt的方法) unix domain 同一主机不同进程间同信一种方式. IPV4 domain 借助IPV4 实现不同主机间进程通信. IPV6 domain
两台主机通信过程.
进程注册套接字
发送端主机内核-->发送缓冲区-->接收缓冲区-->接收端主机内核.
接收到内容要进行IO操作, 往往IO操作比较慢,需要缓冲区.
本文出自 “slayer” 博客,请务必保留此出处http://slayer.blog.51cto.com/4845839/1664761
标签:网络协议
原文地址:http://slayer.blog.51cto.com/4845839/1664761