计算机网络面试题(一)

本文详细介绍了计算机网络面试中的重点,包括TCP建立连接的三次握手、路由协议(RIP和OSPF)、TCP与UDP的区别、端口号分配、HTTP请求报文首部、网页解析流程、IP分片的原因与实现、TCP的四次挥手和超时重传机制,以及TCP如何确保数据传输的可靠性,涵盖了从连接建立到数据传输的各个环节。
摘要由CSDN通过智能技术生成

1:建立TCP的各个系统调用

系统调用

上图给出了TCP服务器和客户端所需要的系统调用

TCP调用各层 来自IBM

上图中从上到下各层分别为TCP应用->套接字层->协议层->接口层->物理层
其中套接字层负责接收任何TCP的系统调用,验证上层传递参数的正确性
协议层负责对协议的实现(TCP),接收上层调用,两个层之间共享的数据结构具有独占访问权限,避免任何数据结构损坏。
接口层运行网络设备驱动程序,该层从物理层接收数据,并向物理层传输数据
每个套接字具有一个套接字队列,并且每个接口具有一个用于数据通信的接口队列。不过,对于整个协议层,只有一个称为 IP 输入队列的协议队列。接口层通过此 IP 输入队列将数据输入到协议层。协议层使用相应的接口队列将数据输出到接口。

来自Shining-LY

**socket网络编程中的系统调用:**这与建立TCP所需的系统调用相同,请参考socket网络编程
除了连接所指的系统调用外,还有以下调用:

shutdown (struct proc *p, struct shutdown_args *uap, int *retval);
Struct shutdown_args
{
    int s;
    int how;
}

在 shutdown 系统调用中:
s 是套接字描述符。
how 指定将关闭哪一部分连接。how 的值 0、1 和 2 分别指定关闭连接的读取部分、写入部分和同时关闭连接的读取及写入部分。
shutdown 系统调用关闭连接的任意一端或两端。如果需要关闭读取部分,则会丢弃接收缓冲区中存在的任何数据,并关闭该端的连接。对写入部分,TCP 发送任何剩余的数据,然后终止连接的写入端。可以看出shutdown函数对四次挥手的过程做了拆分。

soo_close(struct file *fp , struct proc *p);

close 系统调用可关闭或中止套接字上任何挂起的连接。

在套接字中存在一个引用计数,计数方式是父进程加子进程的和。
close函数会去查引用计数,如果为0,执行TCP的四次挥手过程,如果大于0,则减一。
调用之后,TCP连接已经断开,这个时候其上调用write或者read函数则会产生错误码为9即EBADF的错误。
调用close时,如果协议栈中还存在等候发送的数据,则受俩个参数的控制,如下表
这里写图片描述
close与shutdown的区别:
1、是否触发四次挥手
close:只是减少套接字描述符的计数,如果计数为0ÿ

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值