计算机网络(2

计算机网络续

一. 网络编程

网络编程, 指网络上的主机, 通过不同的进程, 以编程的方式实现网络通信(或网络数据传输).
即便是同一个主机, 只要不同进程, 基于网络来传输数据, 也属于网络编程.

二. 网络编程套接字(socket)

socket: 操作系统提供的网络编程的 API 称作 “socket api”.
socket 原译: 插槽, 最初指的是主板上特定的插槽.

1. socket api

  1. 流式套接字
    给 TCP 使用 (TCP: 有连接, 可靠传输, 面向字节流, 全双工);
  2. 数据报套接字
    给 UDP 使用 (UDP: 无连接, 不可靠传输, 面向数据报, 全双工);

由于两个协议差异大, 所以搞两套 api 分别表示.

  1. Unix 域套接字
    不能跨主机通信, 是本地主机进程与进程之间的通信方式.(现在很少用);

2. TCP/UDP协议特点

在这里插入图片描述

( 1. 有链接和无连接
  • 有连接, 相当于电话打通了, 才能说话.
    通信双方保存对方信息
  • 无连接, 相当于发微信, 不需要接通就可以发信息.
    通信双方不保存对方信息

计算机中的连接是 各自保存对方的信息, 此时就认为建立了一个 “抽象的连接”

( 2. 可靠传输和不可靠传输

可靠 != 安全

  • 安全: 传输的数据是否易被黑客捕获, 造成严重影响。
  • 可靠: 要传输的数据, 尽可能 的传输给对方。
  • 为什么说 尽可能:因为网络环境太复杂了,A 传输给 B 中间会经历许多的交换机和路由器转发,若某个交换机 / 和路由器异常繁忙,要处理的数据量已经超出自身的硬件水平,此时就可能会出现 丢包 情况的发生。(所以 丢包 的发生和位置无法预知。为对抗丢包,就引入了TCP可靠性传输,但不能达到100%避免)
( 3. 面向字节流和面向数据报
  • 字节流:比喻成流水一样,读写非常灵活,文件操作就是 字节流。
    TCP 和 文件操作具有相同的特点
  • 数据报: 数据报是传输数据的基本单位, 是一个个的 UDP 数据报

网络传输数据的基本单位术语(0 和 1 的二进制数串)
( 1. 数据报 Datagram;UDP
( 2. 数据段 Segment;TCP
( 3.数据包 Packet;IP
( 4. 数据帧 Frame;数据链路层
无需刻意区分

( 4. 全双工和半双工

全双工:一条链路双向通信(TCP和UDP都是全双工,则既可以写也可以读)
半双工:一条链路单向通信
网线中的几根线,有些线负责信息是发送,有些线负责信息接收

3. UDP的 socket api

( 1. DatagramSocket
系统中本就有 socket 的概念,DtatagramSocket 就是对于操作系统的概念的封装
系统中的 socket 则可以理解成是一种 文件,而 文件 是一种广义的的概念,socket 文件,就可以视为是 “网卡” 的抽象表现。针对 socket 文件的读写操作,就相当于针对 网卡 这个硬件设备进行读写。
这样就可以很方便的操作硬盘,似遥控器远程操控一样,像这种具有 “遥控属性” 的这样概念,计算机中将其命名为 “句柄” (handle – 把手)
(2. DatagramPacket
针对 UDP 数据报 的一个抽象表示,一个 DatagramPacket 对象,就相当于一个 UDP 数据报。
一次发送 /一次接收,就是传输了一个 DatagramPacket 对象。


未完待续…

相关推荐

  1. 计算机网络2

    2024-07-10 05:32:09       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 05:32:09       49 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 05:32:09       53 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 05:32:09       42 阅读
  4. Python语言-面向对象

    2024-07-10 05:32:09       53 阅读

热门阅读

  1. MySQL 中 SQL 查询语句的执行顺序

    2024-07-10 05:32:09       31 阅读
  2. Python之MoviePy视频编辑模块介绍与应用

    2024-07-10 05:32:09       26 阅读
  3. 对Mapper.xml文件进行深入的学习

    2024-07-10 05:32:09       32 阅读
  4. 工作中遇到的问题与解决办法(三)

    2024-07-10 05:32:09       19 阅读
  5. linux工具应用_VERDI

    2024-07-10 05:32:09       26 阅读
  6. 大模型/NLP/算法面试题总结4——bert参数量计算

    2024-07-10 05:32:09       26 阅读
  7. springsecurity(学习自用)

    2024-07-10 05:32:09       25 阅读
  8. 构建响应式CSS导航栏:实现优雅的用户体验

    2024-07-10 05:32:09       21 阅读
  9. debian或Ubuntu中开启ssh允许root远程ssh登录的方法

    2024-07-10 05:32:09       23 阅读
  10. 深入理解基本数据结构:链表详解

    2024-07-10 05:32:09       23 阅读
  11. 白骑士的C++教学基础篇 1.3 控制流

    2024-07-10 05:32:09       22 阅读
  12. Istio实战教程:Service Mesh部署与流量管理

    2024-07-10 05:32:09       22 阅读