天天看点

TCP及socket通信原理详解

TCP/IP原型

DARPA一个项目,逐渐演变而来的。

TCP及socket通信原理详解

端口号

0~1023:管理员才有权限使用,永久地分配给某应用使用;

注册端口:

1024~41951:只有一部分被注册,分配原则上非特别严格;

动态端口或私有端口:

41952+:

/proc/sys/net/ipv4/ip_local_port_range:内核参数定义两个数字,表示可以做为临时端口的起始数字和结束数字。

套接字类型:

tcp socket    TCP传输数据协议、 SCTP流控制传输协议

        udp socket   UDP用户数据报协议      DCCP

raw socket   裸套接字  不通过TCP和UDP等协议直接由应用层的程序直接到达网络层由ipv4  ipv6封装传输

TCP协议的功能:

①连接建立

②将数据打包成段   MTU通常为1500以下

       校验和

③确认、重传以及超时机制

④排序

序列号 32位  并非从0开始  过大的话循环轮换 从0开始

⑤流量控制  速度不同步2台数据的服务器    防止阻塞

缓冲区  发送缓冲    接收缓冲

滑动窗口 

⑥拥塞控制  多个进程通信

慢启动   通过慢启动的方式探测,启动的时候很小  随后以指数级增长。

拥塞避免算法

RFC:请求注解文档,起草定义这个协议的组织定义这个协议实现的过程等。

TCP及socket通信原理详解

socket: IPC的一种实现,用于同一或不同主机上的进程间的通信;

socket通信在domain中实现:

识别一个socket的方法(socket地址格式)

Domain:

Unix Domain: 基于socket机制实现同一主机不同进程间通信的一种方式;AF_UNIX, AF_LOCAL,地址是一个路径名(文件) 同一主机通过内核中一个文件直接传输,而不需要通过协议栈传输。

IPv4 Domain: AF_INET, 基于socket机制借助于ipv4协议实现不同主机(也可以是同一主机)上的进程间通信的机制; 地址是32位的ipv4地址+16位的端口号。

IPv6 Domain: AF_INET6, 地址是128位的Ipv6地址+16位的端口号

socket的类型:

TCP:流式socket,SOCK_STREAM

可靠、双向、面向字节流

UDP:数据报式socket, SOCK_DGRAM

相关的系统调用:

socket(): 创建一个新的socket

bind():绑定于一个套接字地址上;

listen(): 监听套接字;

accept(): 接收连接请求;

connect(): 发起连接请求;

close(): 关闭连接

read()和write(): recv(), send(), recvfrom(), sendto()

TCP及socket通信原理详解

tcp协议通过tcp状态来标记当前处于通信过程的哪个阶段:

CLOSED, LISTEN, SYN_SENT, SYN_RECV, ESTABLISHED, FIN_WAIT1, CLOSE_WAIT, FIN_WAIT2, LAST_ACK, TIME_WAIT, CLOSED

继续阅读