计算机网络
文章平均质量分 53
介绍计算机网络的相关知识
Iovems
这个作者很懒,什么都没留下…
展开
-
1.文件IO-printf函数
Linux中printf函数的底层实现printf ,是C语言库函数,它的实现依赖于操作系统;在 linux 中,printf 的实现,实际上间接的调用了 linux 的系统调用接口,这类似于 windows api。那么 printf 调用了 linux 的哪个系统调用呢?我们来扒一扒源码(linux 0.11,为什么用这么老的版本,因为我们都是初学者,完不起太高大上的几百万行的linux 2....原创 2018-06-12 16:18:40 · 1890 阅读 · 1 评论 -
2.文件IO-read/write/open函数
用Linux接口实现文件拷贝#define BUFFERSIZE 4096int main(int argc, char* argv[]) { int srcfd = open(argv[1], O_RDONLY); // 用只读的方式打开一个已经存在的文件 //创建一个新的文件,这个文件只能写,权限是 0666 int dstfd = open(argv[2], O_CREAT ...原创 2018-06-12 16:56:07 · 1351 阅读 · 0 评论 -
3.文件IO-文件描述符,文件表与lseek
文件描述符在上一篇博客当中,我们知道open函数会返回一个整数,它在本进程中唯一标识了一个文件;在一个进程中,存在着一个大数组,记录了打开的文件;这个数组的索引就是open函数返回的整数,而这个索引就是文件描述符;而这个数组的每一项,都记录了与打开的文件相关的信息;在操作系统当中,是通过进程控制块(PCB)来描述进程信息和相关资源的;实际上在Linux中,PCB就是一个巨大的结构体,即task_s...原创 2018-06-12 21:45:53 · 995 阅读 · 0 评论 -
4.文件IO-阻塞与非阻塞IO
通常来说,从普通文件读数据,无论你是采用 fscanf,fgets 也好,read 也好,一定会在有限的时间内返回;但是如果你从设备,比如终端(标准输入设备)读数据,只要没有遇到换行符('\n'),read 一定会“堵”在那而不返回;还有比如从网络读数据,如果网络一直没有数据到来,read 函数也会一直堵在那而不返回;read的这种行为,称之为block,一旦发生block,本进程将会被操作系统设置为睡眠,直到等待的事件发生(比如有数据到来),进程才会被唤醒;系统调用 write 同样有可能原创 2018-06-12 21:57:41 · 1165 阅读 · 0 评论 -
5.文件IO-fcntl函数(修改文件表的 f_flags 标志)
阻塞与非阻塞是文件本身的属性;每个文件描述符是数组的一个索引,这个数组每个元素保存了一个指向文件表的指针;这个文件表的结构如下:原创 2018-06-12 21:58:38 · 1037 阅读 · 0 评论 -
6.文件与目录-文件系统初探
文件系统初探原创 2018-06-12 21:59:37 · 1013 阅读 · 0 评论 -
7.文件与目录-ext2文件系统及实验
ext2文件系统及实验原创 2018-06-12 22:00:42 · 905 阅读 · 0 评论 -
8.文件与目录-stat函数及结构体
stat函数及结构体原创 2018-06-12 22:02:10 · 799 阅读 · 0 评论 -
9.文件与目录-Linux中的时间
Linux中的时间原创 2018-06-12 22:03:14 · 703 阅读 · 0 评论 -
10.文件与目录- st_mode 与 chmod 函数
st_mode 与 chmod 函数原创 2018-06-12 22:03:54 · 915 阅读 · 0 评论 -
11.进程-基础
当你编译完一段代码生成 a.out 后,在命令行键入 ./a.out,这时候,就有一个(或多个)新的进程产生了(前提你的 a.out 没问题^_^).在此之前,a.out 文件只是一份保存在你硬盘上的死物而已,它并不是进程。一旦你在你的终端里键入./a.out,你的终端 shell(它也是个进程,一个活物) 就会把 a.out 文件读到内存,一旦把控制权交给内存中的这段 a.out (称之为内存映...原创 2018-06-13 10:47:16 · 1116 阅读 · 0 评论 -
12.进程-进程的产生(fork函数)
上篇文章中的a.out进程实际上是由终端 bash 进程创造出来的;那 bash 进程的父进程又是谁呢?如果你不断追溯下去,你就会发现,最终的那个进程就是 pid 为1 的 init 进程,而 init 进程,又是由一个 pid 为 0 的进程通过系统调用 fork 生成的,它也是第一个由 fork 函数创造出来的进程;fork 是用户创建进程的唯一方法(万事都有特例,现阶段可忽略);fork函数...原创 2018-06-29 22:27:17 · 409 阅读 · 0 评论 -
13.进程-fork函数的原理和进程空间
进程空间这里说的进程空间,指的是进程虚拟地址空间;每个进程都有自己的4GB 虚拟地址空间,这里指的是32位系统下的进程;每个进程的进程虚拟地址空间是相互隔离的,互不影响;...原创 2018-06-29 22:44:04 · 352 阅读 · 0 评论 -
14.进程-fork函数与文件共享
提个问题:如果进程在fork之前打开了一些文件,那么 fork 完之后,这些文件的描述符是共享的,还是不共享的?父进程和子进程的空间是隔离的,所以,打开的文件也应该是不共享的吧?答案是NO;假设现在是Linux32位系统,进程空间有4G的大小;这4G空间并不是完全隔离的;实际上进程空间被分割为用户空间和内核空间。对于32 位 Linux 来说,从 0-3GB 的空间是用户空间,从 3GB - 4G...原创 2018-07-07 13:44:00 · 301 阅读 · 0 评论 -
15.进程-孤儿进程与僵尸进程
正常情况下,子进程是通过父进程创建的,子进程再创建新的进程;子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程到底什么时候结束;当一个进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态;孤儿进程:父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程;孤儿进程将被init进程(进程号为1)所收养,并由ini...原创 2018-07-07 15:11:42 · 242 阅读 · 0 评论 -
16.进程-进程间通信概述
进程间通信,也就是大家常说的 IPC(Inter Process Communication),指的是不同的进程间进行交流,本质上就是进程之间发送和接收数据;本质上,信号也是属于进程间通信的一种,但信号能传递的信息量实在是太少太少了;不同进程间的进程空间是独立的。对于Linux 来说,进程的 0-3GB 空间是互不相干的,3GB-4GB 是内核空间,属于所有进程间共享地带;进程空间的独立性,以及内...原创 2018-07-07 16:47:05 · 573 阅读 · 0 评论 -
17.进程-无名管道
无名管道适合有亲缘关系的进程(通常是父子进程)间通信了;实际上,你或多或少的都用过管道这种通信方式,比如你在使用的 linux 命令中的管道连接符 |;什么是管道之前提到过的,使用本地文件进行进程间通信的方式,那么就可以把管道理解成位于进程的内核空间的“文件”;给文件加引号,是因为它和文件确实很像,因为它也有描述符。但是它确实又不是普通的本地文件,而是一种抽象的存在;当进程使用 pipe 函数,就...原创 2018-07-07 18:48:58 · 370 阅读 · 0 评论 -
18.进程-有名管道
有名管道打破了无名管道的限制,进化出了一个实实在在的 FIFO 类型的文件。这意味着即使没有亲缘关系的进程也可以互相通信了。所以,只要不同的进程打开 FIFO 文件,往此文件读写数据,就可以达到通信的目的;不过 FIFO 文件与我们最开始讲的本地文件通信还是有着本质的区别,它长着普通文件的脑袋,却有着无名管道的基因;FIFO文件的特性文件属性前面标注的文件类型是 p,代表管道文件大小是 0fifo...原创 2018-07-07 19:07:32 · 533 阅读 · 0 评论 -
28.TCP协议-保活定时器
保活定时器原创 2018-06-25 22:37:35 · 548 阅读 · 0 评论 -
27.TCP协议-糊涂窗口综合症
糊涂窗口综合症原创 2018-06-25 22:37:15 · 724 阅读 · 0 评论 -
26.TCP协议-持续定时器
持续定时器原创 2018-06-25 22:36:56 · 645 阅读 · 0 评论 -
25.TCP协议-超时与重传
超时与重传原创 2018-06-25 22:36:14 · 847 阅读 · 0 评论 -
24.TCP协议-快重传与快恢复
快重传与快恢复原创 2018-06-25 22:35:54 · 1061 阅读 · 0 评论 -
23.TCP协议-两个拥塞控制算法:慢启动和拥塞避免
慢启动与拥塞避免原创 2018-06-25 22:35:30 · 3580 阅读 · 0 评论 -
22.TCP协议-观察慢启动的发包过程(拥塞控制算法)
慢启动——观察原创 2018-06-25 22:34:43 · 720 阅读 · 0 评论 -
21.TCP协议-拥塞控制概述
概述在学习拥塞控制前,我们假设:接收方总是有足够大的缓存空间,接收方的接收窗口大小总是很大——这意味着接收方对数据来者不拒。在基于这样的理想条件上,如果发送方发送的数据接收方没有收到,那么大抵上可以判断为网络出现了拥网络拥塞是怎么来的图1 某个小型局域网 图 1 所示的是一个典型的小型局域网,SW 表示交换机,R 表示路由器。基于第 1 节中所述的假设,如果 PC1 给主机 PC3 发送 TCP ...原创 2018-06-25 22:34:07 · 662 阅读 · 0 评论 -
19.TCP协议-PSH标志
PSH标志原创 2018-06-14 20:54:04 · 1011 阅读 · 0 评论 -
18.TCP协议-滑动窗口(抓包分析)
滑动窗口(抓包分析)原创 2018-06-14 20:53:36 · 1211 阅读 · 0 评论 -
17.TCP协议-滑动窗口(基础)
滑动窗口(基础)原创 2018-06-14 20:53:06 · 787 阅读 · 0 评论 -
16.TCP协议-Nagle算法
Nagle)原创 2018-06-14 20:52:06 · 779 阅读 · 0 评论 -
15.TCP协议-迟到的ACK-Linux
迟到的ACK-Linux原创 2018-06-14 20:51:21 · 858 阅读 · 0 评论 -
14.TCP协议-迟到的ACK-Windows
迟到的ACK-Windows原创 2018-06-14 20:50:40 · 1932 阅读 · 0 评论 -
13.TCP协议-同时关闭
有同学会问,为什么不写同时打开?(同时打开指的是两端都是服务器,两端同时向对方建立连接请求)。一方面,在我们实际生活中几乎遇不到;另一方面,很多操作系统实际都不能正确的支持同时打开,所以,这里就不写了,如果你对这个很感兴趣,请参考《TCP/IP 详解卷1:协议》的 18.8 小节。1. 同时关闭同时关闭,指的是已建立连接的两端同时发起主动关闭。TCP 协议允许这种事情发生。见图 1. 图1 同时关...原创 2018-06-14 20:28:47 · 1031 阅读 · 0 评论 -
12.TCP协议-半打开
1. 半打开(Half-Open)如果一方已经关闭或异常终止,而另一方却对此毫不知情,这种连接就称为半打开的。比如:其中一端突然断网了,或者停电导致的异常关机。假设在主机 A 和 B 之间建立了一条 TCP 连接,由于停电导致主机 B 异常关机。接下来,我们分三种情况讨论,A 此时继续给 B 发数据,会有什么现象。B 仍然关机B 开机,但是未启动服务B 开机并重新启动了服务2. 实验serv 程序...原创 2018-06-14 20:28:03 · 805 阅读 · 0 评论 -
11.TCP协议-连接异常与RST
RST段当TCP连接出现严重的错误时,必须释放连接;通过将TCP 首部中的 RST 标志位置 1,就可以通知对端发生错误,以终止连接;我们在 TCP 协议(连接异常)一文中已经看到过这种错误,当时实验演示的是向一个不存在的端口建立连接,导致对端发送过来一个 RST 段。异常终止连接正常情况下,关闭连接的方式是发送 FIN 段,即四次挥手。这种方式也称为有序释放(orderly release)。也...原创 2018-06-14 20:20:48 · 973 阅读 · 0 评论 -
10.TCP协议-FIN_WAIT2
FIN_WAIT2原创 2018-06-14 19:56:42 · 816 阅读 · 0 评论 -
9.TCP协议-TIME_WAIT 状态
TIME_WAIT 状态原创 2018-06-13 22:17:53 · 747 阅读 · 0 评论 -
8.TCP协议-状态机
TCP协议-状态机原创 2018-06-13 22:17:21 · 937 阅读 · 0 评论 -
7.TCP协议-MSS
MSS原创 2018-06-13 22:16:51 · 1497 阅读 · 0 评论 -
6.TCP协议-连接异常
连接异常原创 2018-06-13 22:16:21 · 1188 阅读 · 0 评论