网络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);