网络编程重点

1>OIS 7层模型    

用户空间:应用层             7>提供各种网络接口
                  表示层             6>数据表示,加密与压缩
                  会话层             5>主机之间会话管理
内核空间:传输层             4>控制哪个进程发送哪个接受
                  网络层             3>寻址和路由选择
                  数据链路层      2>相邻节点可靠传输
                  物理层             1>二进制比特传输

TCP/IP 4层模型

  用户空间:应用层         
  内核空间:传输层    
                    网络层 
                    网络接口和物理层

TCP/IP 5层模型

用户空间:应用层        
内核空间:传输层    
                  网络层 
                  数据链路层
                  物理层

2>传输层的功能、网络层的功能?以及分别是第几层

传输层:第四层,提供端对端的接口

网络层:第三层,为数据包选择路由

3>MAC地址:
    a.IP地址变不变,MAC地址变不变

    切换网络,IP地址改变,MAC地址不改变

    b.ARP RARP协议功能

    ARP:通过ip地址获取其对应的mac地址。
    RARP:通过mac地址获取其对应的ip地址

4>限制数据包大小的协议?

   MTU和MSS协议

5>TCP和UDP的异同点

TCP协议
提供面向连接的,可靠的数据传输服务
数据无误,数据无丢失,数据无失序,数据无重复到达的通信。
序列号:每一个数据包都会编上一个编号,该编号称之为序列号,且每一个序列号都需要应答包应答。
应答包:应答序列号的。
传输效率低,耗费资源多
数据的发送和接收是不同步的,存在粘包现象。(不存在数据边界)
由于TCP效率比较低,所以将多个足够小,且发送间隔短的数据包沾成一个包发送。该算法称之为nagle算法
UDP
无连接的,不可靠的,尽力的传输协议。
不能保证数据的可靠性,数据有可能在传输过程中丢失,或者出现失序或者重复到达的情况。
传输效率高,
限制每次传输的数据大小,超出部分直接删除。
数据的发送和接收是同步的。(不会粘包)
6>IP分类,分成2类,分别是什么,占几个字节?

IPv4:本质上是4个字节,32位的无符号整数
IPv6:本质上是16个字节,128位无符号整数
7>IP划分?分成几类?其中哪几类可以分配给主机使用,D类,E类作用。

   a.特殊IP地址:网络地址,广播地址
   b.每—类的主机号是多少个,可用主机号是多少个

8>子网掩码
    a.默认子网掩码是什么
    b.给定IP地址,给定子网网段个数,会计算子网掩码
    c.给定IP地址,给定子网掩码,计算子网网段个数,每个子网网段中主机号个数,可用主机号个数。

C类IP地址的默认子网掩码:11111111 11111111 11111111 00000000 ==》 255.255.255.0

B类IP地址的默认子网掩码:11111111 11111111 00000000 00000000 ==》 255.255.0.0

A类IP地址的默认子网掩码:11111111 00000000 00000000 00000000 ==》 255.0.0.0

D类和E类没有子网掩码!!!!!

9>字节序
简述字节序的概念,并用共用体(联合体)的方式计算本机是大端还是小端


#include <stdio.h>                           
union t
{
    unsigned int a;
    char b;
};
int main(int argc, const char *argv[])
{ 
    union t x;
    x.a = 1;
    printf("%#x\n", x.b);
    if(0x01 == x.b)
    {
        printf("little-endian\n");
    }
    else
    {
        printf("big-endian\n");
    }
    return 0;

10>TCP的API流程,UDP的API流程

TCP:socket,bind,listen,accept,recv,send,connect

UDP:socket,bind,recvfrom,sendto

11>TCP中的send能否替换成其他(sendto write)recv能否替换成其他(recvfrom read)

12>UDP中的sendto能否替换成其他(send write)。recvfrom能否替换成其他(recv read)

13>UDP中的connect,与TCP中的connect的区别

TCP中的connect函数会连接服务器,产生三次握手,将服务器和客户端连接起来。
UDP中的connect不会产生连接,仅仅是将对端的IP和端口号记录到内核套接字中。此时UDP只能与记录的对端进行通信
TCP中的connect函数只能成功一次,代表连接服务器
UDP中的connect函数可以被调用多次,刷新内核中对端的IP和端口。若想要清空内核中对端的地址信息,则将sin_family = AF_UNSPEC.
当udp采用connect的方式收发报文后,可将将recvfrom后面的参数填NULL,sendto函数后面参数填NULL和0;
14>TCP多进程并发服务器模型,多线程并发服务器模型。

void handler(int sig){
    while(waitpid(-1, NULL, WNOHANG) > 0);
}

signal(17, handler);
sfd = socket();
bind();
listen();
while(1){
    newfd = accept();
    if(fork() == 0){
        close(sfd);
        while(1){
            recv();
            send();        
        }
        close(newfd);
        exit(0);         //必须退出子进程
    }
    close(newfd);
}
close(sfd);
sfd = socket();
bind();
listen();
while(1){
    newfd = accept();
    pthread_create(&tid, NULL, deal_cli_msg, &info);
    pthread_detach();
}
close(sfd);

void* deal_cli_msg(void* arg)
{
    int newfd = arg->newfd;
    struct sockaddr_in cin = arg->cin;
    while(1)
    {
        recv();
        send();    
    }
    close(newfd);
}

15>IO多路复用分类,请简述其中一种的原理

  1. 进程中如果同时需要处理多路输入输出流,在使用单进程单线程的情况下,同时处理多个输入输出请求。
  2. 在无法用多进程多线程,可以选择用IO多路复用;
  3. 由于不需要创建新的进程和线程,减少系统的资源开销,减少上下文切换的次数。
    1. 上下文:运行一个进程所需要的所有资源
    2. 上下文切换:从A进程切换到B进程,A进程的资源要完全替换成B进程的,是一个耗时操作。
  4. 允许同时对多个IO进行操作,内核一旦发现进程执行一个或多个IO事件,会通知该进程。

16>以太网头的协议类型

  • 0X0800 只接收发往本机的mac的ip类型的数据帧 
  • 0X0806 只接收发往本机的ARP类型的数据帧
  • 0x8035 只接受发往本机的RARP类型的数据帧
  • 0X0003 接收发往本机的MAC所有类型:ip,arp,rarp数据帧,接收从本机发出去的数据帧,混杂模式打开的情况下,会接收到非发往本地的MAC数据帧

17>与分包(将数据包分成数据帧)相关的包头:

        以太网头 b. IP头 C.TCP头 D.UDP头

18>TCP头中有:端口号 序列号 应答号

        SYN FIN PSH ACK

        SYN FIN: ack = seq+1;

        PSH: ack=seq+len;

19>三次握手,四次挥手

  1. 第一次握手:客户端发送SYN包(SYN=1, seq=0)给服务器,并进入SYN_SENT状态,等待服务器返回确认包。
  2. 第二次握手:服务器接收到SYN包,确认客户端的SYN,发送ACK包(ACK=1 , ack=1),同时发送一个SYN包(SYN=1, seq=0),并进入SYN_RCVD状态。
  3. 第三次握手:客户端接收到服务器的SYN包,以及ACK包,进入establish状态,同时向服务器发送ACK包(ACK=1, ack=1)。此时三次握手包发送完毕,服务器也进入establish状态
  1. 第一次挥手,主动关闭方发送一个FIN包(FIN=1, seq = u)给被动方,进入FIN_WAIT_1状态;
  2. 第二次挥手:被动方接收到FIN包,给主动方发送一个ACK包(ACK=1, ack=u+1);并进入CLOKSE_WAIT状态。主动方接受到ACK包后,进入FIN_WAIT_2状态。如果有数据没有发送完毕,则继续发送,直到发送完毕为止;
  3. 第三次挥手:被动方发送一个FIN包(FIN=1, seq=w),进入LAST_ACK状态.
  4. 第四次挥手:主动关闭方收到FIN包,回复一个ACK包(ACK=1, ack=w+1)。被动关闭方收到主动关闭方的ACK后关闭连接。

20>请简述TCP UDP的API流程

21>UDP如何能够让本端知道对端掉线。

心跳包机制,客户端每隔一定时间给对端发送一个心跳包,对端给客户端发送一个应答,刷新对端的状态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/29890.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java基础学习打卡05】命令提示符

目录 前言一、命令提示符是什么二、命令提示符常用命令1.打开命令提示符2.命令演示3.常用命令 总结 前言 知道命令提示符是什么&#xff0c;熟练打开命令提示符&#xff0c;熟练使用常用命令&#xff0c;并自行尝试其他命令。本文只是对命令提示符进行简单介绍和使用。 一、命…

chatgpt赋能python:Python截取指定字符操作:让你的SEO优化变得更简单

Python截取指定字符操作&#xff1a;让你的SEO优化变得更简单 在SEO优化中&#xff0c;截取指定字符是一个非常常见的操作。Python作为一款开源的高级编程语言&#xff0c;提供了许多方便的函数和方法来处理文本操作&#xff0c;包括截取指定字符。在本文中&#xff0c;我们将…

在线DDL操作踩坑记录

官方地址&#xff1a;GitHub - github/gh-ost: GitHubs Online Schema-migration Tool for MySQL 使用ghost方式在线对mysql表进行ddl ghost原理&#xff1a; 要对表A进行DDL&#xff0c;在主库建立一个ghost表 A1在表A1上进行alter操作伪装成一个mysql的从库&#xff0c;监…

SpringCloud Alibaba-Sentinel

SpringCloud Alibaba-Sentinel 1. Sentinel核心库1.1 Sentinel介绍1.2 Sentinel核心功能1.2.1 流量控制1.2.2 熔断降级 2 Sentinel 限流熔断降级2.1 SentinelResource定义资源2.1.1 blockHandler/blockHandlerClass2.1.2 fallback/fallbackClass2.1.3 defaultFallback 2.2 Sent…

Java中不支持多重继承原因

在 Java 中回答这种棘手问题的关键是准备好相关主题, 以应对后续的各种可能的问题。 这是非常经典的问题&#xff0c;与为什么 String 在 Java 中是不可变的很类似; 这两个问题之间的相似之处在于它们主要是由 Java 创作者的设计决策使然。 为什么Java不支持类多重继承, 可以考…

ChatGPT将改变教育,而不是摧毁它

01 学校和大学的反应迅速而果断 就在 OpenAI 于 2022 年 11月下旬发布ChatGPT 的几天后&#xff0c;该聊天机器人被广泛谴责为一种免费的论文写作、应试工具&#xff0c;它很容易在作业中作弊。 美国第二大学区洛杉矶联合大学立即阻止了OpenAI网站从其学校网络访问。其他人很…

k8s的service资源类型有ClusterIP、Nodeport、ExternalName、LoadBalancer、Headless(None)

1. ClusterIP 是什么 ClusterIP 是在所有节点内生成一个虚拟IP&#xff0c;为一组pod提供统一的接入点&#xff0c;当service存在时&#xff0c;它的IP地址和端口不会发生改变&#xff0c;客户端通过service的ip和端口建立连接&#xff0c;由service将连接路由到该服务的任意一…

数据结构——广义表

文章目录 前言二、特殊矩阵的压缩存储数组的存储结构和实现按行优先存储按列优先存储 矩阵的压缩存储稀疏矩阵 广义表 总结 前言 数组&#xff0c;数组的压缩存储&#xff0c;广义表 二、特殊矩阵的压缩存储 数组的存储结构和实现 对于多维数组&#xff0c;可以分为按行优先…

spring 反射,BigDecimal,自定义注解的使用(aop)

反射 利用反射调用它类中的属性和方法时&#xff0c;无视修饰符。 获取Class类的对象&#xff08;三种方式&#xff09; Class.forName(“全类名”) &#xff08;推荐使用&#xff09;类名.class对象.getClass() 反射获取构造方法Constructor<?>[] getConstructors()…

父亲节礼物:用Python编写一个小型游戏

名字&#xff1a;阿玥的小东东 学习&#xff1a;Python、C/C 主页链接&#xff1a;阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 安装必要的库 绘制游戏界面 添加游戏元素 为游戏添加交互性 结论 一、父亲节的来历简介 二…

UE4/5样条线学习(三):样条线与时间轴

目录 简单的小模板 物品跟随样条线移动 粒子特效类&#xff1a; 简单的小模板 通过之前的案例&#xff0c;我们可以直接创建一个actor蓝图&#xff0c;加上要用的样条组件&#xff1a; 然后我们就可以通过时间轴做出不同的一些效果 在蓝图中找到时间轴的这个节点 双击时间…

1745_Perl中的switch结构

全部学习汇总&#xff1a; GreyZhang/perl_basic: some perl basic learning notes. (github.com) 用了很久时间的Perl了&#xff0c;但是一直没有使用过switch结构。即使有的时候&#xff0c;基本上也通过其他的形式完成了相关工作。虽说有时候可能会效率低一些&#xff0c;但…

【备战秋招】每日一题:5月13日美团春招第三题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检&#xff0c;为了更好的阅读体检&#xff0c;&#xff0c;可以查看我的算法学习博客第三题-火车调度 在线评测链接:P1288 题目描述 塔子哥是一位火车车厢调度员。 这一天&#xff0c;一列带有 n 个编号车厢的列车进站了&#xff0c;编号为 1\rightarrow …

【linux网络配置】多个网卡一起使用,一个网卡连内网,一个网卡连外网

一、问题背景 因为有一个工作站在内网中&#xff0c;但是没有办法联网&#xff08;校园网账户有限&#xff09;。 虽然工作站没有联网&#xff0c;但是我仍然可以通过局域网远程控制工作站&#xff0c;使其访问校园网验证页面实现上网。 当给工作站安装软件或依赖项时&#…

grpc 实现grpc gateway(window环境)

官网&#xff1a;https://grpc-ecosystem.github.io/grpc-gateway/ github&#xff1a;https://github.com/grpc-ecosystem/grpc-gateway grpc gateway的原理官网有介绍。总结一下就是&#xff1a; gRPC-Gateway帮助你同时以gRPC和RESTful风格提供你的API。grpc-gateway旨在为您…

【Linux】linux下使用命令修改jar包内某一个文件中的内容并重新运行jar程序

linux下使用命令修改jar包内某一个文件中的内容并重新运行jar程序 一、背景描述二、vi命令编辑三、启动程序四、拓展--启动脚本 一、背景描述 需求&#xff1a;发现线上的 iotp-irsb-server-v1.0.0.2.jar 包中配置文件的日志级别配置错误&#xff0c;需要在线修改jar包中文件的…

MFC的定义和实际操作方法

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天从另一个角度来看一下MFC。 完整的应用一般由四个类组成&#xff1a;CWinApp应用类&#xff0c;CFrameWnd窗口框架类&#xff0c;CDocument文档类&#xff0c;CView视类 过程&#xff1a;CWinApp创建CF…

ubuntu iptables开机自启动

一、配置ubuntu路由转发 用在一台电脑有多个网卡的情形下&#xff0c;一个网卡5网段、一个网卡8网段&#xff0c;8网段是网络出口&#xff0c;所以5网段的设备需要入网的话&#xff0c;要路由转发。 sudo iptables -t nat -A POSTROUTING -s 192.168.5.0/24 -j SNAT --to-sou…

STM32速成笔记—概述

文章目录 前言一、专栏简介二、前期准备三、编程规范以及程序架构简介1. 编程规范2. 程序架构 四、STM32F103ZET6简介五、程序模板六、ST-Link调试6.1 硬件连接6.2 Keil配置6.3 下载调试 前言 本人技术菜鸟一枚&#xff0c;2022年大学毕业&#xff0c;大学加入老师实验室&#…

chatgpt赋能python:如何在Python中创建模块:完整指南

如何在Python中创建模块&#xff1a;完整指南 如果你是一位Python开发者&#xff0c;你肯定需要用到模块。模块使得代码更容易组织和管理&#xff0c;并且可以复用许多代码片段&#xff0c; 提高代码的可重用性。在Python中&#xff0c;模块是一组相关函数&#xff0c;方法和变…