《计算机网络-自顶向下方法》读书笔记-传输层篇

本文是《计算机网络-自顶向下方法》读书笔记,主要探讨传输层的TCP和UDP协议。介绍了TCP的可靠数据传输机制,如序列号、确认号、超时重传、快速重传和拥塞控制策略。同时,分析了UDP的简单结构和适用于实时应用的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《计算机网络-自顶向下方法》读书笔记-传输层篇

标签: 网络 读书笔记 校招 面试


概述和传输层服务

传输层协议为运行在不同Host上的进程提供了一种逻辑通信机制

端系统运行传输层协议

  • 发送方 : 将应用递交的消息分成一个或多个Segment,并向下穿给网络层
  • 接收方 : 将接收到的segment组装成消息,并向上交给应用层
    .

传输层可以为应用提供的协议主要有TCP和UDP

传输层VS网络层
网络层: 提供主机之间的逻辑通信
传输层: 提供进程之间的逻辑通信

  • 位于网络层之上
  • 依赖网络层服务
  • 对网络层服务进行(可能的)增强

可靠、按序的交付服务(TCP)

  • 拥塞控制
  • 流量控制
  • 连接建立

不可靠的交付服务(UDP)

  • 基于”尽力而为(Best-effort)”的网络层,没有(可靠性方面的)扩展

两种服务均不保证

  • 延迟
  • 带宽

多路复用与多路分解

接收端进行多路分组:传输层依据头部信息将收到的Segment交付给正确的Socket,即正确的进程.
发送端进行多路复用:从多个Socket接收数据,为每块数据封装上头部信息,生成Segment,交给网络层.

分用如何工作

主机接收到IP数据报(datagram)

  • 每个数据报携带源IP地址、目的IP地址
  • 每个数据报携带一个传输层的段(Segment)
  • 每个段携带源端口号和目的端口号

主机收到Segment之后,传输层协议提取IP地址和端口号信息,将Segment导向相应的Socket.

  • TCP做更多处理

无连接分用

主机收到UDP之后,检查目的端口号然后把数据导向相应Socket.

不同源IP地址和源端口号的IP数据包被导向同一个Socket

UDP的Socket用二元组标识:

  • (目的IP地址,目的端口号)

Java中使用UDP的方式说明只关心监听的端口,而不管数据从何而来

DatagramSocket socket = new DatagramSocket(servPort);  
DatagramPacket packet = new DatagramPacket(new byte[ECHOMAX], ECHOMAX);  
while(true){  
    socket.receive(packet);  
    System.out.println("Handling client at " + packet.getAddress().getHostAddress()
        + " on port" + packet.getPort());  
    socket.send(packet);  
    packet.setLength(ECHOMAX);  
}  

面向连接的分用

TCP的Socket用四元组标识:

  • 源IP地址
  • 源端口号
  • 目的IP地址
  • 目的端口号

服务器可能同时支持多个TCP

接收端利用所有的四个值将Segment导向合适的Socket

Web服务器为每个客户端开不同的 Socket

ServerSocket servSock = new ServerSocket(servPort);  
while(true){  
        //可以看出每次有新连接进来,accept方法都会返回一个新的Socket对象
        Socket clntSock = servSock.accept();  
        SocketAddress clientAddress =      
            clntSock.getRemoteSocketAddress();  
        System.out.println("Handling client at " + clientAddress);  
        InputStream in = clntSock.getInputStream();  
        OutputStream out = clntSock.getOutputStream();  
        while((recvMsgSize = in.read(receiveBuf)) != -1)  {  
            out.write(receiveBuf, 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值