第5章 网络通信实战
-
服务端:client 服务端:server
-
互联网上的数据包大小最大为1.5KB左右。
数据通信的双方,发起第一个数据包的一方成为客户端。被动收到第一个数据包的一方成为服务端
-
端口号:区别不同的服务端的应用程序
-
套接字:socket
套接字就是一个数字,调用socket函数时,就能生产(返回)这样一个数字。该数字具有唯一性,操作系统保证,该数字一旦被某个程序调用socket函数返回,就一直给这个程序用,直到该程序调用close函数关闭对该数字的调用,该数字才被系统回收(回收后如果该程序或其他程序有调用了socket函数,该函数可以给该程序或者其他程序复用)。只要该数字没有系统回收,不管哪个程序调用socket函数,都不可能返回一个和该数字一样的数字,这就是唯一性。
-
三次握手:客观端发起:(当客户端调用connect函数时发生)
第一次握手:客户端发送SYN
第二次握手:服务端收到SYN,发送SYN与ACK
第三次握手:客户端接收到SYN与ACK后,发送ACK
服务端收到ACK后,建立连接成功。
-
四次挥手:客户端与服务端都可以发起。设先发起的为First,后发起的为Last;
第一次挥手:First发送FIN与ACK
第二次挥手:Last接收FIN与ACK后,发送ACK
第三次挥手:Last发送FIN与ACK
第四次挥手:First发送ACK
-
相同的ip地址与端口只能被绑定(bind)一次
- TCP连接一共有11种状态:CLOSED \ LISTEN \ SYN_RCVD \ SYN_SENT \ ESTABLISHED \ FIN_WAIT_1 \ FIN_WAIT_2 \ TIME_WAIT \ CLOSE_WAIT \ LAST_ACK \ CLOSING
-
epoll技术:epoll就是一种在Linux上使用的I/O多路复用并支持高并发的典型技术。
-
epoll实现的三个函数:
int epoll_create(int size);
int epoll_ctl(int efpd, int op, int sockid, struct epoll_event *event) ;
int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);
-
LT是水平触发,属于低速模式,如果该事件没处理完,就会一直被触发。
ET是边缘触发,属于高速模式,该事件的通知只会出现1次。