网络编程
熬夜是一种修养
这个作者很懒,什么都没留下…
展开
-
TCP套接字编程函数的理解
socket函数作用:创建一个套接字(可以是TCP的,也可以是其他协议的,取决于socket的参数),返回一个标志该套接字的套接字描述符。关键:所创建的套接字并不含有IP和端口号。可以认为,socket创建的套接字是空的,需要其他函数往里面填写IP和端口号等信息。使用方:客户端和服务器端都要使用。connect函数作用:与TCP服务器端建立连接。适用方:客户端。关键...原创 2019-02-21 13:33:03 · 212 阅读 · 0 评论 -
SIGPIPE、RST
理解SIGPIPE的产生:当一个进程向某个已收到RST的套接字执行写操作时,内核向该进程发送一个SIGPIPE信号。默认行为是终止进程。理解RST的产生:当服务器close(而不是shutdown)一个连接时,如果客户端接着向连接发送数据。根据TCP协议的规定,服务器端会响应一个RST给客户端。理解:客户可能在读回任何数据之前执行两次针对服务器的写操作,而第一次引起RST,第二...原创 2019-03-13 10:15:32 · 319 阅读 · 0 评论 -
关于select调用过程的一点理解
select、poll、epoll的介绍请参考:https://blog.csdn.net/zymill/article/details/79998593epoll详解:https://www.cnblogs.com/lojunren/p/3856290.html其中select实现中讲的select调用步骤,我的理解如下:1.将设定好的fd_set从用户态拷贝到内核态。监听fd...原创 2019-03-17 10:21:43 · 455 阅读 · 0 评论 -
muduo库的摸索(2)——Reactor结构的类分析
EventLoop类Poller类Channel类定时器类原创 2019-03-10 15:49:09 · 113 阅读 · 0 评论 -
理解套接字地址结构
套接字是什么?套接字是两个数值的组合:IP地址和端口号。在传输层,TCP连接由两组套接字唯一确定,也就是两个ip和其相应的端口号。套接字地址结构是什么?在LINUX中,套接字被表现为一种数据结构。如下图所示。只需要关注sockaddr_in中的三个字段:sin_family、sin_addr、sin_port。其中family字段是对网络协议的说明(如是ipv4还是ipv6),addr...原创 2019-02-20 19:29:59 · 705 阅读 · 0 评论 -
TCP状态图中的TIME_WAIT状态
TCP状态图参见https://blog.csdn.net/timerzip/article/details/87739621TIME_WAIT状态小概念:TIME_WAIT状态是一种状态,端点处于这种状态时,会维护一些信息。TIME_WAIT状态会存在2MSL的时长。作用:可靠地实现TCP全双工连接的终止。通过维护一定时间主动方的最终状态来实现。从TCP连接的断开讲起:是“T...原创 2019-02-20 19:13:26 · 186 阅读 · 0 评论 -
TCP第三次握手失败怎么办
转自:http://www.cnblogs.com/heyonggang/p/3386415.htmlTCP第三次握手失败怎么办 笔试题中经常会遇到这个问题:如果tcp建立连接时第三次握手失败,tcp会做何操作?该问题的本质是判断我们对tcp的状态转换是否能有比较深刻的理解。只要理解了下面的状态转换图,很容易回答上述问题。 ...转载 2019-02-19 22:35:28 · 1182 阅读 · 0 评论 -
理解运输层的端口
端口来源:运输层的数据最终是要传递给应用层的进程的,那么如何准确的传给目的进程就成为了一个问题。因为源主机和目的主机很可能是不同的系统,因而无法使用进程标志符(二者的标识符系统可能不同)来确定进程。因此,端口产生了。端口的作用:通信的终点是一个进程,但是只要把数据传递给指定的端口就行了,TCP\udp\sctp等协议负责将该端口的数据传递到目的进程。端口使用原理:由“作用”理解...原创 2019-02-20 10:16:25 · 4837 阅读 · 0 评论 -
muduo库的摸索(1)
muduo库的安装1. 从https://github.com/chenshuo/muduo下载muduo文件。(只要download会自动打包一个muduo_master.zip文件)2.接下来是在linux中的命令行了sudo apt-get install cmake(安装cmake)sudo apt-get install libboost-dev libboost-te...原创 2019-02-27 16:24:26 · 245 阅读 · 0 评论 -
简单TCP客户/服务器的理解
主要组成:1. 服务器部分:socket、bind、listen之后,for循环内accept获取 “已连接套接字” 描述符、fork子程序处理该连接的数据传输。2. 客户端部分:socket、connect之后,调用数据发送函数向该套接字内写数据,即发送数据。注意点:1. 进程exit后,会关闭所有打开的文件描述符,包括套接字描述符。2. 信号处理:建立连接后的服务器进程是一...原创 2019-02-21 22:24:31 · 352 阅读 · 0 评论 -
为什么 while((pid = waitpid(-1, &stat, WNOHANG)) > 0)能处理所有子进程
在unp中有一节代码是这样的:void sig_chld(int signo){ pid_t pid; int stat; while((pid = waitpid(-1, &stat, WNOHANG)) > 0){ printf("child %d terminated\n...原创 2019-02-21 19:57:24 · 1055 阅读 · 0 评论 -
muduo库的摸索(3)——TCP网络库的结构
TCP网络库结构如下:1. TcpServer占用一个主loop线程,来处理新的连接。2. TcpServer用Acceptor来接受新的连接,Acceptor通过一个channel来监测套接字(channel类参见我另一篇文章)。3. TcpServer会将建立的新的连接TcpConnection对象,绑定到一个次一级的loop线程,也就是TcpLoopThreadPool里的...原创 2019-03-13 16:30:03 · 135 阅读 · 0 评论