![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
计算机网络
kang___xi
这个作者很懒,什么都没留下…
展开
-
TCP 为什么是三次握手,而不是两次或四次?
TCP是一个全双工的通信,三次握手完成两个重要的功能,一是协调双方双方做好发送数据的准备工作(双方都知道彼此已准备好),确保双方都知道对方的存在;二是协调好双方的初始序列号,这个序列号在握手过程中被发送和确认。 首先我们来解释为什么不是两次握手,而是三次握手。我们以打电话为例,在打电话的过程中,双方为了确认自己说的话能被对方听见,需要向对方进行确认。下图这种情况就类似...原创 2018-05-22 16:59:01 · 3471 阅读 · 1 评论 -
网络编程教程(一)TCP/IP协议族概述
TCP/IP协议族理论上是七层模型,在实际应用中是四层,下面介绍每一层的作用。1.数据链路层 数据链路层实现了网卡接口的网络驱动层序,以处理数据在物理媒介(比如以太网、令牌环网)上的传输。不同的物理网络具有不同的电器特性,网络驱动程序隐藏了这些细节,为上层协议提供了一个统一的接口。 数据链路层两个常用的协议是ARP协议和RARP协议。2.网络层 ...原创 2018-07-01 13:16:29 · 265 阅读 · 0 评论 -
网络编程教程(五)高级I/O函数
本篇博客讨论和网络编程相关的几个高级I/O函数,分为以下三类: 用于创建文件描述符的函数,包括pipe、dup/dup2函数。 用于读写数据的函数,包括readv/writev、sendfile、mmap/munmap、splice和tee函数。 用于控制I/O行为和属性的函数,包括fcntl函数。一、用于创建文件描述符的函...原创 2018-07-23 22:21:46 · 318 阅读 · 0 评论 -
网络编程教程(三)TCP协议详解
一、TCP服务的特点1.面向连接的 使用TCP协议通信的双方必须先建立连接,然后才能通信。这里就涉及到对连接的理解,或者说这个连接对应到socket编程中又是什么?在进行TCP通信时,通信双方都必须在内核中为该连接分配一定的内核资源,用于记录和维持该连接的状态、连接上的数据发送情况和定时器等。2.可靠的 TCP协议通过超时重传和应答确认机制来保证数据...原创 2018-07-20 11:42:00 · 674 阅读 · 0 评论 -
网络编程教程(七)I/O复用
I/O复用是一种I/O通知机制,使得程序同时监听多个文件描述符,从而提高程序的性能。一、I/O复用的使用场景 1.客户端程序要同时处理多个socket 2.客户端程序同时处理用户输入和网络连接 3.TCP服务器要同时处理监控socket和连接socket 4.服务器要同时处理TCP请求和UDP请求 ...原创 2018-07-26 23:07:43 · 233 阅读 · 0 评论 -
网络编程教程(四)Linux网络编程基础API
首先介绍Linux下整个的网络编程流程:一、socket地址API1.主机字节序和网络字节序 字节序分为大端字节序(big endian)和小端字节序(little endian)。大端字节序是指一个整数的搞我字节存储在内存的低地址处,低位字节存储在内存的高地址处。小端字节序则是整数的高位字节存储在内存的高地址处,而低位字节则存储在内存的低地址处。...原创 2018-07-22 22:18:09 · 256 阅读 · 0 评论 -
网络编程教程(八)信号和定时器
一、信号1.信号 API(1)发送信号#include <sys/types.h>#include <signal.h>int kill(pid_t pid, int sig);函数功能: 向进程ID为pid的进程发送信号sig函数参数: pid:进程编号 sig:信号值返回值: 函数成功时返回0,失败则返回-1,并设...原创 2018-07-27 19:49:57 · 1029 阅读 · 0 评论 -
listen()函数的backlog参数含义详解
#include <sys/socket.h>int listen(int sockfd, int backlog);sockfd是调用socket()函数的返回值,不用多解释。这里主要说明backlog参数的含义: 为了理解其中的backlog参数,我们必须认识到内核为任何一个给定的监听套接字维护两个队列: (1)未完成连接队列,每个...原创 2018-10-14 12:03:48 · 2353 阅读 · 4 评论 -
TCP三次握手和网络编程函数的对应关系
1.客户端调用connect()函数,此时客户端会向服务端发送SYN2.服务端收到SYN后,会从listen()函数返回SYN+ACK3.客户端收到connect()函数的返回,之后向服务端发送最后一个ACK4.服务端收到最后一个ACK以后,将该连接请求从未完成连接队列放入已完成连接队列中,等待accept()从该队列中取出...原创 2018-10-14 12:11:11 · 1222 阅读 · 0 评论