随笔分类 - 关于网络编程的
这里是关于网络编程的,包括tcp/ip协议栈,以及socket。
是我自己的学习记录。(包括视频,书籍,以及别人的博客)
摘要:背景: 想实现一个判断当前系统有没有外网的方法,想到了两种思路: 1)实现一个ICMP协议。但是这个需要root权限才能运行。可以参考:https://www.cnblogs.com/xcywt/p/16070814.html 2)通过ping指令,解析ping的结果来判断有没有网。 代码: 0)命
阅读全文
摘要:背景: 想实现一个在没外网的时候就自动重启路由器的功能。 又不想用ping命令,因为在代码里调用system("ping"); 可能会比较耗时,得单开线程。于是找了个实现ICMP协议的代码。 参考:https://blog.csdn.net/qivan/article/details/7237051
阅读全文
摘要:滑动窗口协议 还可以看我的另一篇博客,有更详细的介绍:http://www.cnblogs.com/xcywt/p/8401523.html 属于TCP协议中的一种应用,用于网络数据传输时的流量控制,以避免拥塞的发生。该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发送一个分组就
阅读全文
摘要:网上看了一篇关于HTTP的博客,觉得还不错,这里就记下来了。 参考:https://www.cnblogs.com/guguli/p/4758937.html 一、主要特点1.支持客户/服务器模式2.简单快速:客户向服务器请求服务时,只需请求方法和路径。(常用请求方法有GET HEAD POST)3
阅读全文
摘要:关于什么是UNIX域套接字可以参考:http://www.cnblogs.com/xcywt/p/8185597.html这里主要介绍非命名的UNIX域套接字的用法。1.socketpair函数先看man手册: SYNOPSIS #include <sys/types.h> /* See NOTES
阅读全文
摘要:这里主要介绍命名UNIX域套接字 1.什么是UNIX域套接字Unix域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务通信的一种方式。是进程间通信(IPC)的一种方式。它提供了两类套接字:字节流套接字(有点像TCP)和数据报套接字(有点像UDP)UNIX域数据报服务是可靠的,不会丢失消息,
阅读全文
摘要:参考(原文简直超赞):https://zhidao.baidu.com/question/687563051895364284.html下面是我结合原文写的,为了便于自己理解:关于阻塞和非阻塞的理解可以看这个:http://www.cnblogs.com/xcywt/p/8146123.html 1
阅读全文
摘要:在网络编程中通常需要处理很多个连接,可以用select和poll来处理多个连接。但是select都受进程能打开的最大文件描述符个数的限制。并且select和poll效率会随着监听fd的数目增多而下降。 解决方法就是用epoll 1.epoll是Linux内核为处理大批量文件描述符而做了改进的poll
阅读全文
摘要:我们知道TCP是全双工的,可以在接收数据的同时发送数据。假设有主机A在和主机B通信,可以认为是在两者之间存在两个管道。就像这样:A > BA < B 1.close close可以用来关闭一个文件描述符。也就可以用来关闭一个套接字。 当关闭一个套接字时,该套接字不能再由调用进程使用。如果调用进程再去
阅读全文
摘要:1.先说select在多路IO中的限制:1)linux中每个程序能够打开的最多文件描述符是有限制的。默认是1024.可以通过ulimit -n进行查看和修改: xcy@xcy-virtual-machine:~/test/sock10_poll$ ulimit -n1024xcy@xcy-virtu
阅读全文
摘要:1、先看man手册 SYNOPSIS /* According to POSIX.1-2001 */ #include <sys/select.h> /* According to earlier standards */ #include <sys/time.h> #include <sys/ty
阅读全文
摘要:我们知道TCP是面向连接的,我们只知道有连接断开,其实内部还有一些比较复杂的状态。去了解各个状态之间的切换有助于我们更加深入的了解TCP。下面我们就来分析各个状态。 1、如下图示(图源百度)图中显示出了10种状态。 我们假定断开时是client主动断开的。对于server来说状态有:closed -
阅读全文
摘要:1、TCP的特点: 基于字节流面向连接可靠传输缓冲传输全双工流量控制 2、头部格式和说明 图源百度。如下图示,就是TCP包的头部结构。可以看到这个头部最少有4x5=20个字节。 另外还需要理解TCP协议是承载在IP协议中的。关于IP协议可以参考:http://www.cnblogs.com/xcyw
阅读全文
摘要:关于七层模型和四层模型可以参考这个:http://www.cnblogs.com/xcywt/p/5027277.html 因为四层模型用的比较多,这里只拿四层模型来分析。 1、四层模型中的最下层是链路层,传输的是以太网数据帧。主要有三种格式的以太网数据帧。这里暂时不做详细分析 2、IP数据报格式
阅读全文
摘要:一、gethostname,gethostbyname的用法 这两个函数可以用来获取主机的信息。gethostname:获取主机的名字gethostbyname:通过名字获取其他的信息(比如ip) 1.gethostname:man手册里面的解释(部分): #include <unistd.h> i
阅读全文
摘要:1、干货 Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。 简而言之,就是可以查看经过网卡的数据包,还会整理出来是哪一层协议的包。
阅读全文
摘要:参考自《VC++深入详解》 这是我在看书时记录下来的东西。 注:下面的Socket其实都应该是socket 第14章网络编程 Socket是连接应用程序与网络驱动程序的桥梁,Socket在应用程序中创建,通过绑定与驱动程序建立关系。 此后,应用程序给Socket的数据,由Socket交给驱动程序向网
阅读全文