11.网络编程的基础知识

news/2025/2/2 20:47:47 标签: 网络, linux

11.网络编程的基础知识

      • **1. OSI模型与TCP/IP模型**
      • **2. IP地址分类**
      • **3. Socket编程**
      • **4. TCP三次握手与四次挥手**
      • **5. 常用网络测试工具**
      • **6. 练习与作业**
      • **7. 总结**


1. OSI模型与TCP/IP模型

  • OSI模型(开放系统互联模型):
    • 7层结构
      1. 应用层:为网络用户提供各种服务(如HTTP、FTP)。
      2. 表示层:数据加密解密、压缩解压缩。
      3. 会话层:管理进程会话过程(如连接状态)。
      4. 传输层:提供可靠或不可靠的传输服务(如TCP、UDP)。
      5. 网络:负责数据传输的路由选择和网际互连(如IP)。
      6. 数据链路层:负责物理相邻主机间的数据传输(如MAC地址)。
      7. 物理层:负责将数据转换成电信号并通过网络介质传输。
  • TCP/IP模型(网际互联模型):
    • 4层结构
      1. 应用层:应用程序(如HTTP、FTP)。
      2. 传输层:端口号(如TCP、UDP)。
      3. 网络:IP地址(如IP、ICMP)。
      4. 接口层:网卡、驱动(如ARP、RARP)。

2. IP地址分类

  • IP地址:由网络位和主机位组成。
  • 分类
    • A类:1.0.0.0 - 126.255.255.255,用于超大规模网络
    • B类:128.0.0.0 - 191.255.255.255,用于大中规模网络
    • C类:192.0.0.0 - 223.255.255.255,用于中小规模网络
    • D类:224.0.0.0 - 239.255.255.255,用于组播和广播。
    • E类:240.0.0.0 - 255.255.255.255,用于实验。

3. Socket编程

  • Socket:用于网络通信的一组接口函数。
  • TCP编程流程
    • 服务器端
      1. 创建Socketsocket()
      2. 绑定地址bind()
      3. 监听连接listen()
      4. 接受连接accept()
      5. 接收数据recv()
      6. 关闭连接close()
    • 客户端
      1. 创建Socketsocket()
      2. 连接服务器connect()
      3. 发送数据send()
      4. 关闭连接close()

4. TCP三次握手与四次挥手

  • 三次握手
    1. 客户端发送SYN到服务器。
    2. 服务器回复SYN-ACK
    3. 客户端发送ACK
  • 四次挥手
    1. 客户端发送FIN到服务器。
    2. 服务器回复ACK
    3. 服务器发送FIN到客户端。
    4. 客户端回复ACK

5. 常用网络测试工具

  • telnet:远程登录工具。
    • 用法:telnet IP地址 端口
  • netstat:查看网络端口使用情况。
    • 用法:netstat -anp
  • ping:测试网络连通性。
    • 用法:ping IP地址
  • arp:地址解析命令。
    • 用法:arp -an
  • wireshark:抓包工具。
    • 过滤规则:ip.src == x.x.x.xtcp.port == xx
  • tcpdump:命令行抓包工具。
    • 用法:tcpdump -n -i eth0

6. 练习与作业

  • 练习1:编写TCP服务器和客户端程序,实现简单的字符串传输。
  • 练习2:使用wireshark抓包验证TCP三次握手和四次挥手。
  • 作业1:优化聊天程序,支持实时双向通信。
  • 作业2:设计通用的客户端和服务器测试工具。
  • 作业3:实现客户端向服务器发送结构体数据、文件内容等功能。

7. 总结

  • OSI模型TCP/IP模型网络通信的基础框架。
  • IP地址分类决定了网络的规模和用途。
  • Socket编程是实现网络通信的核心技术。
  • TCP三次握手与四次挥手确保了连接的可靠性和有序性。
  • 网络测试工具(如telnetnetstatwireshark)是调试和排查网络问题的重要工具。

http://www.niftyadmin.cn/n/5840289.html

相关文章

第十章:大内存的申请和释放

目录 第一节:函数修改 1-1.ConcurrentAlloc.h 1-2.Common.h 1-3.PageCache.cpp 第二节:测试 第三节:结语 大内存的思路是将其以一页为对齐数,申请一个为切分的span,这种span在pc就有,所以直接到pc中申请…

一文讲解Java中的ArrayList和LinkedList

ArrayList和LinkedList有什么区别? ArrayList 是基于数组实现的,LinkedList 是基于链表实现的。 二者用途有什么不同? 多数情况下,ArrayList更利于查找,LinkedList更利于增删 由于 ArrayList 是基于数组实现的&#…

【Linux】opencv在arm64上提示找不到libjasper-dev

解决opencv在arm64上提示找不到libjasper-dev的问题。 本文首发于❄慕雪的寒舍 问题说明 最近我在尝试编译opencv,安装依赖项libjasper1和libjasper-dev的时候就遇到了这个问题。在amd64平台上,我们可以通过下面的命令安装(ubuntu18.04&…

FreeRTOS学习笔记2:FreeRTOS的基础知识

1.FreeRTOS介绍 FreeRTOS是一个免费的嵌入式实时操作系统,同时它在市面上也是一款主流的操作系统,是工作上必不可少的技能。它具有以下六种特点: 1.免费开源:在商业产品中使用,无潜在商业风险,无需担心。 2…

NIST的 临床质量指标的简介

啥是NIST? 美国国家标准与技术研究院(National Institute of Standards and Technology,NIST)直属美国商务部,从事物理、生物和工程方面的基础和应用研究,以及测量技术和测试方法方面的研究,提…

leetcode 2563. 统计公平数对的数目

题目如下 数据范围 显然数组长度最大可以到10的5次方n方的复杂度必然超时,阅读题目实际上就是寻找两个位置不同的数满足不等式即可(实际上i j无所谓是哪个 我们只要把位置小的想成i就行)。 按照上面的思路我们只需要排序数组然后从前往后遍历数组然后利用二分查找…

操作系统知识速记:死锁

操作系统知识速记:死锁 什么是死锁? 死锁是指两个或多个进程因争夺资源而造成的一种相互等待的状态,进程间形成循环等待,导致所有进程均无法继续执行。通常情况下,死锁的发生有以下四个必要条件: 互斥条…

Java小白入门教程:封装、继承、多态、重载、重写、抽象、接口

目录 一、封装(Encapsulation) 基本语法举例 真实实例 二、继承(Inheritance) 基本语法举例 真实实例 三、多态(Polymorphism) 基本语法举例 真实实例 四、重载(Overloading&#xff0…