网络OSI(7层协议):
物理层
数据链路层:单个链路上如何传输数据。这些协议与被讨论的各种介质有关。
网络层
传输层:TCP / UDP
会话层
表示层
应用层:FTP HTTP
TCP的三次握手(SYN:同步序列编号(Synchronize Sequence Numbers),ACK:确认字符(Acknowledgement)。
第一次握手:客户端发送SYN包给服务器,进入SYN_SENT状态,等待服务器回复。
第二次握手:服务器收到客户端的SYN包后,组合ACK包(ACK=客户端SYN+1),然后服务器将自己的SYN号+ACK包一起发给客户端,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN+ACK包后,向服务器发送ACK包(服务器SYN+1)。发送后,服务器与客户端进入链接状态。
总结:1.客户端发SYN给服务器。
2.服务器发客户端SYN+1和服务器SYN。
3.客户端发服务器SYN+1给服务器
Socket:
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,相当于库的形式提供给开发人员。
Socket其实就是将复杂的TCP/IP协议族隐藏在Socket接口后面,开发人员只需要使用简单的接口,其余的让Socket去组织数据,以符合指定的协议。
目前大多数平台的tcp和udp的应用开发均基于socket接口实现。
tcp协议和udp协议的差别
TCP UDP
是否连接 面向连接 面向非连接
传输可靠性 可靠 不可靠
应用场合 传输大量数据 少量数据
速度 慢 快
创建udp和tcp:
int sock_udp = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
int sock_tcp = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);