《TCP/IP网络编程》笔记
文章平均质量分 82
学习过程中整理的一些笔记。
JeffyGao
吃完饭再说 0.0
展开
-
TCP服务器建立
建立TCP服务器连接的过程中主要通过以下系统调用序列来获取某些函数,这些系统调用主要包括:socket(),bind(),listen(),accept(),send()和recv()。如下图所示,TCP应用程序进行的普通调用序列:TCP调用的各个层:(1)套接字层接收进行的任何 TCP 系统调用。套接字层验证 TCP 应用程序传递的参数的正确性。这是一个独立于协议 的层,因为尚未将协议连接到调用中。(2)套接字层下面是协议层,该层包含协议的实际实现(本例中为 TCP)。当套接字层对协议层进行原创 2021-01-22 23:03:38 · 1769 阅读 · 0 评论 -
第18章 – 多线程服务器端的实现
由于Web服务器端协议本身具有的特点,经常需要同时向多个客户端提供服务。因此,人们逐渐舍弃进程。1、创建线程函数 pthread_create()#include <pthread.h>int pthread_create( pthread_t *thread, const pthread_attr_t *attr,void*( *start_routine)(void *), void *arg );功能: 创建一个线程参数: thread:保存新创建线程ID原创 2020-12-03 21:18:18 · 247 阅读 · 0 评论 -
第17章 – 优于 select的 epoll
select 功能:用来验证3中监视项的变化情况。(接受、传输、异常状态)。缺点:无论如何优化程序,也无法同时接入上百个客户端(并不适合现在的服务器开发)。epoll 用起来要比 select 简单、实用。1、epoll函数理解及应用【补】结构体 epoll_event epoll_event将发生变化(发生事件)的文件描述符单独集中到一起。struct epoll_event{ __uint32_t events; // uint前2个下划线 epoll_原创 2020-12-03 21:16:36 · 143 阅读 · 0 评论 -
《网络编程》- 第16章 – 关于 I/O 流分离的其它内容
可以把 “流” 理解成数据收发路径。1、复制文件描述符 dup(),dup2()#include <unistd.h>int dup( int fildes );int dup2(int fildes, int fildes2); //重定向功能: 复制文件描述符,这样就可以实现“半关闭”功能。而不是close文件描述符后,后面针对文件描述符的 write、read都被关闭。函数dup() : fildes:要复制的的文件描述符 int fil_n原创 2020-12-03 21:14:20 · 123 阅读 · 0 评论 -
《网络编程》- 第15章 – 套接字和标准 I/O
1、标准 I/O函数和系统函数系统读写函数:read()、write()标准I/O函数:fgets()、fputs()系统读写函数不带缓冲区,而标准I/O函数自带缓冲区。在读写比较大的文件的时候,标准I/O函数更快。【辨】系统函数 读写的输入是:文件描述符;标准I/O函数 读写的输入是:FILE 结构体指针。2、使用标准 I/O 函数函数 fgets();#include <stdio.h>int fgetc(FILE *stream);char *fgets(c原创 2020-12-03 21:13:34 · 192 阅读 · 0 评论 -
《网络编程》-第14章 – 多播与广播
多播与广播都是一次性向多个主机发送数据。多播:即使在跨越不同网络的情况下,只要加入多播组就能接收数据。广播:只能向同一网络中的主机传输数据。1、多播 多播、广播的数据传输都是基于 UDP 完成的。多播的数据传输方式及流量方面的优点:TTL:time to live,生存时间。 用整数表示,并且每经过1个路由器就减1.TTL变成0时,该数据包无法再被传递,只能销毁。 TTL的设置方法:eg. int time_live = 64 int send原创 2020-11-25 15:54:53 · 263 阅读 · 0 评论 -
《网络编程》- 第13章 – 多种I/O函数
1、recv 和 send 函数flags 在赋值的时候,直接赋值为0就行了(默认值)相较于 read、write的却别:在接受/传输数据时可带可选项(如MSG_OOB)数据接收#include <sys/socket.h>ssize_t read( int fd, void *buf, size_t count );ssize_t recv( int sockfd, void *buf, size_t nbytes, int flags );功能:将fd内的数据读入buf文件。原创 2020-11-25 15:53:59 · 156 阅读 · 0 评论 -
《网络编程》- 第12章 – I/O复用
1、 设置文件描述符利用 select() 函数可以同时监视多个文件描述符(接受、传输、异常状态)。具体来讲是通过fd_set 数组来判断的。FD ZERO(fd_set * fdset):将fd_set变量的所有位初始化为0。FD_SET(int fd, fd_set * fdset): 在参数fdset指向的变量中注册文件描述符fd的信息。FD_CLR(int fd, fd_set * fdset):从参数fdset指向的变量中清除文件描述符fad的信息。FD_ISSET(i原创 2020-11-25 15:52:09 · 181 阅读 · 0 评论 -
《网络编程》-第11章 – 进程间通信
进程 是最小的分配内存的单位;线程 是最小的执行单位。进程间通信: 只要有两个进程可以同时访问的内存空间,就可以通过此空间进行数据交换。1、pipe() 管道函数#include <unistd.h>int pipe( int filedes[2] );管道并不属于进程的资源,而是和套接字一样,属于操作系统。(所以也不是 fork() 函数的复制对象)。功能: 实现进程间通信。参数: filedes[0] 通过管道接收数据时使用的文件描述符,即管道出原创 2020-11-25 15:50:58 · 173 阅读 · 0 评论 -
《网络编程》-第10章 – 多进程服务端
具有代表性的并发服务器端实现模型: 多进程服务器:通过创建多个进程提供服务; 多路复用服务器:通过捆绑并统一管理I/O对象提供服务; 多线程服务器:通过生成与客户端等量的线程提供服务。1、进程fork() 函数#include <unistd.h>pid_t fork();功能: 创建一个进程。返回值:失败,返回-1; 成功,返回进程ID;父进程: fork() 函数返回子进程ID;子进程: fork() 函数返回0。2、僵尸进程原创 2020-11-24 00:35:04 · 364 阅读 · 0 评论 -
《网络编程》- 第9章 – 套接字的多种可选项
1、套接字可选项IPPROTO_IP层:IP协议相关事项;IPPROTO_TCP层:TCP协议相关的事项;SOL_SOCKET层:套接字相关的通用可选项。getsockopt() 函数#include <sys/socket.h>int getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen);功能: 读取套接字可选项;参数:返回值:原创 2020-11-22 14:08:11 · 175 阅读 · 0 评论 -
《网络编程》-第8章 – 域名及网络地址
1、域名系统DNS:域名系统功能: 是对 IP 地址和域名进行相互转换的系统,其核心是 DNS服务器。域名赋予服务器端的是虚拟地址,而非实际地址。用户只用访问虚拟地址,然后系统通过DNS服务器将其转换成目的IP进行访问。 当本机DNS服务器没有接触过网络上相应IP时,此时DNS服务器无法解析该地址,这时候它会询问其它DNS服务器,然后提供给用户。2、利用域名获取 IP 地址gethostbyname() 函数#include <netdb.h>struct hos原创 2020-11-20 22:48:45 · 173 阅读 · 0 评论 -
《网络编程》-第7章 – 优雅地断开套接字连接
第7章 – 优雅地断开套接字连接思想: 只关闭一部分数据交换中使用的流 ( Half-close )。断开一部分连接是指,可以传输数据但无法接收,或可以接收数据但无法传输。顾名思义就是只关闭流的一半。1、shutdown() 函数#include <sys/socket.h>int shutdown( int sock, int howto );功能: 关闭一部分数据交换中使用的流。参数: sock:需要断开的套接字文件描述符。 howto:传原创 2020-11-20 13:45:42 · 207 阅读 · 0 评论 -
《网络编程》-第6章 – 基于UDP的服务器端/客户端_note
第6章 – 基于UDP的服务器端/客户端1、TCP/UDP 区别TCPUDPTCP是面向连接的UDP是面向无连接的UDP程序结构较简单TCP是面向字节流的UDP是基于数据报的TCP保证数据正确性UDP可能丢包TCP保证数据顺序UDP不保证1) UDP比TCP慢的原因- 收发数据前后进行的连接设置及清除过程。- 收发数据过程中为保证可靠性而添加的流控制2、UDP套接字通信模型 UDP与TCP不同,无需经过连接过程。 也原创 2020-11-20 00:25:09 · 315 阅读 · 0 评论 -
《网络编程》-第5章 – 基于TCP的服务器端/客户端
1、对 –第4章 echo_client.c 程序做了修改 确保在 client上write的数据被完整的read。解决方法是设置一个延时,书里面是写一个 while(),在里面读完。2、实例该程序中,服务器端从客户端获得多个数字和运算符信息。服务器端收到数字后对其进行加减乘运算,然后把结果传回客户端。例如,向服务器端传递3、5、9的同时请求加法运算,则客户端收到3+5+9的运算结果;若请求做乘法运算,则客户端收到3×5x9的运算结果。而如果向服务器端传递4、3、2的同时要求做减法,则客户端原创 2020-11-19 20:26:16 · 196 阅读 · 0 评论 -
《网络编程》-第4章 – 基于TCP的服务器端/客户端(1)
1、基于 TCP服务端/客户端函数调用关系图4-10的总体流程整理如下:服务器端创建套接字后连续调用bind 、 listen函数进入等待状态,客户端通过调用connect函数发起连接请求。需要注意的是,客户端只能等到服务器端调用listen函数后才能调connect函数。同时要清楚,客户端调用connect函数前,服务器端有可能率先调用accept函数。当然,此时服务器端在调用accept函数时进入阻塞( blocking )状态,直到客户端调connect函数为止。2、实现迭代服务器端/客户端原创 2020-11-19 10:34:14 · 324 阅读 · 0 评论 -
《网络编程》-第3章 – 地址族与数据序列
1、 大端序、小端序大端序(Big Endian):高位字节存放到低位地址;小端序 (Little Endian):高位字节存放到高位地址。2、习题1) IP地址族IPv4和IPv6有何区别?在何种背景下诞生了IPv6?IPV4是4字节地址族,IPV6是16字节地址族。IPV6的诞生是为了应对2010年前后IP地址耗尽的问题而提出的标准2) 通过IPV4网络ID、主机ID及路由器的关系说明向公司局域网中的计算机传输数据的过程?首先数据传输的第一个环节是向目标IP所属的网络传输数据。此时使用的是原创 2020-11-19 10:32:37 · 284 阅读 · 0 评论 -
《网络编程》-第2章 – 套接字类型与协议设置
1、复习 socket() 函数int socket( int domain, int type, int protocol );domain:套接字使用的协议族一般用AF_INET IPv4互联网协议族 AF_INET6 IPv6互联网协议族type:套接字数据传输类型信息SOCK_STREAM 面向连接的TCP套接字特征:传输过程中数据不会消失。按序传输数据。传输的数据不存在数据边界( Boundary )。=》可靠的、按顺序传递的、基于字节的面向连接的数原创 2020-11-17 16:51:07 · 373 阅读 · 1 评论 -
《网络编程》-第1章 – 理解网络编程和套接字
第1章 – 理解网络编程和套接字套接字( socket ):是网络数据传输用的软件设备,用来连接该网络。1、服务器创建过程:第一步:调用 socket 函数创建套接字。第二步:调用 bind 函数分配IP地址和端口号。第三步:调用 listen 函数转为可接收请求状态。第四步:调用 accept 函数受理连接请求。socket() 函数#include <sys/socket.h>int socket ( int domain, int type, int protocol原创 2020-11-17 09:15:52 · 464 阅读 · 0 评论