网络
知识拓荒者
共同学习
展开
-
浅谈网络之DHCP协议
DHCP协议的作用是动态分配IP地址其出现的需求是,当计算机数目比较多时,管理员没有办法高效的分配ip地址,如果是每个人都找管理员配一下地址,不仅管理员忙不过来,等待上网的人也会非常痛苦;那么DHCP协议是如何自动分配ip地址的呢假设一台计算机A,没有地址,那么就开始了如下场景:A发送Udp的广播说:为没有地址,谁能给我一个, 我的mac地址是xxxxxx; //A发送源ip 0.0.0.0...原创 2018-06-23 22:13:29 · 280 阅读 · 0 评论 -
accept中的监听套接字和已连接套接字
int accept(int sockfd, struct sockaddr* cliaddr, socklen_t *addrlen);该函数用于从已完成连接的队列队头返回下一个已完成连接。 其中sockfd为监听套接字cliaddr和addrlen由内核填入客户端的协议地址返回值为已连接套接字 监听套接字一个服务进程通常只创建一个监听套接字,用来监听是否有...原创 2018-10-15 21:31:35 · 839 阅读 · 0 评论 -
listen中的backlog
服务端在bind完后,会启用监听,即listenint listen(int sockfd, int backlog);其中backlog规定了内核应该为响应套接字排队的最大连接个数。在内核中维护了两个队列,一个是未完成队列,一个是已完成队列未完成队列,即没有完成三次握手 已完成队列,已经完成三次握手,但是进程还没处理到队列是多少取决于backlog,以及内核的实现,不会小于...原创 2018-10-15 21:18:45 · 672 阅读 · 0 评论 -
TCP三次握手和四次挥手
三次握手 四次挥手FIN由调用close自动触发服务端也可以主动关闭原创 2018-10-09 09:50:55 · 113 阅读 · 0 评论 -
connect函数,出错返回
ETIMEOUT,表示未收到SYN命令的响应(可能该服务器ip地址不存在,收不到arp的响应,但是有该地址的子网) ECONNREFUSED,表示服务端在我们指定的端口没有进程等待与之连接,是个硬错误(ip地址存在,并无对应的监听端口进程) EHOSTUNREACH,ENETUNREACH,表示目标主机不可达 ,是个软错误(路由器x跳以后找不到能到达的路由,路由返回不可达)...原创 2018-10-14 21:07:19 · 3470 阅读 · 0 评论 -
TCP客户端服务端demo
服务端程序>#include <stdio.h>#include <sys/socket.h>#include <strings.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <stdlib.h原创 2018-10-17 22:42:18 · 293 阅读 · 0 评论 -
测试机器的字节序,大端or小端
写了个demomain.cpp如下:#include <stdio.h>int main(){ union{ int n; char szn[sizeof(int)]; }un; un.n = 0x01020304; if ( sizeof(i...原创 2018-10-12 14:30:02 · 188 阅读 · 0 评论 -
应用进程与socket缓冲区
TCP如果进程缓冲区>套接字缓冲区,阻塞write 如果套接字的缓冲区中有数据,阻塞write即套接字的缓冲区容不下要发送的数据,则阻塞进程,知道发送数据都复制到套接字的发送缓冲区。TCP将发送缓冲区的数据发送给对端TCP 对端必须确认收到的数据 本端TCP丢弃已确认的数据 已发送并未确认的数据,必须保留副本,直到确认为止UDPUDP不存在真正的发送缓冲区,因为无...原创 2018-10-12 10:35:50 · 659 阅读 · 0 评论 -
TCP连接状态
客户端最后TIME_WAIT,需等待2MSL超时,然后恢复到CLOSED状态。等待超时的原因为:1.防止服务器没收到ACK,那么服务器超时后,会重新发FIN和ACK,此时,客户端就可以重发ACK给服务器,否则,服务器就无法转换为CLOSED2.等待网络中的旧的报文生命周期结束,在网络中消失,下次重新发送报文,网络中就都是新的了 如果一方突然断电了,有没有办法知道?答:没...原创 2018-10-09 15:28:56 · 129 阅读 · 0 评论