主要内容:Socket发送函数在TCP层的实现 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 上一篇blog讲的是send().sendto().sendmsg()和sendmmsg()这些发送函数的系统调用和 Socket层实现,现在来看下它们的TCP层实现. TCP层实现 SOCK_STREAM类socket的TCP层操作函数集实例为tcp_prot,其中使用tcp_sendmsg()来发送数据. struct proto tcp_prot =…
主要内容:Socket发送函数在TCP层的实现 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 在上篇blog中分析了tcp_sendmsg()这个主要函数的实现,现在来看下之前略过的一些细节, 包括等待连接的建立.tcp_push()的实现.tcp_autocorking和数据的复制. 等待连接建立 在tcp_sendmsg()中如果发现连接尚未建立,会调用sk_stream_wait_connect()来等待连接的建立, 连接成功建立时返回0,之…
主要内容:从TCP层面判断发送缓存的申请是否合法,进程因缺少发送缓存而进行睡眠等待. 因为有发送缓存可写事件而被唤醒. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd TCP的发送缓存管理发生在两个层面上:单个Socket和整个TCP层. 上一篇blog讲述了单个Socket层面上的发送缓存管理,现在来看下整个TCP层面上的发送缓存管理. 从TCP层面判断发送缓存的申请是否合法 在申请发送缓存时,会调用sk_stream_memory_free()来…
主要内容:TCP发送缓存的初始化.动态调整.申请和释放. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 数据结构 TCP对发送缓存的管理是在两个层面上进行的,一个层面是单个socket的发送缓存管理, 另一个层面是整个TCP层的内存管理. 单个socket的发送缓存所涉及的变量. struct sock { ... /* 预分配缓存大小,是已经分配但尚未使用的部分 */ int sk_forward_alloc; ... /* 提交给IP层的发送数…
简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP socket发送大数据包时,接收端和发送端数据不一致 服务端接收Receive不完全 在发送端,一次发送200k个字节,在接收端,一次接收200k个字节, 但是在接收端,经常会出现 socket.receive 接收不全的情况 , 偶尔接收的包也是正常的,用Wireshark抓包发现,每次发送都分成…
1. TCP协议发送数据 和 接收数据 TCP协议接收数据:• 创建接收端的Socket对象• 监听客户端连接.返回一个对应的Socket对象• 获取输入流,读取数据显示在控制台• 释放资源 TCP协议发送数据: • 创建发送端的Socket对象• 这一步如果成功,就说明连接已经建立成功了.• 获取输出流,写数据• 释放资源 2. 代码实现: (1)发送端: package cn.itcast_06; import java.io.IOException; import java.io.Outp…
目前的.net 架构下缺乏高效的TCP消息发送组件,而这种组件是构建高性能分布式应用所必需的.为此我结合多年的底层开发经验开发了一个.net 下的高效TCP消息发送组件.这个组件在异步发送时可以达到每秒160万包,而相同大小的数据包用WCF的TCP模式OneWay 方式发送每秒只能达到5.6万包. 项目首页 http://ntcpmsg.codeplex.com/ 功能介绍: NTCPMSG 组件是基于 .net framework 的开源TCP 消息发送和接收组件.和.net framewor…
本文主要内容:tcp_ack()中的一些细节,如发送窗口的更新.持续定时器等. 内核版本:3.2.12 Author:zhangskd @ csdn 发送窗口的更新 什么时候需要更新发送窗口呢? (1)确认了新的数据 (2)条件1不成立,ACK段的序号是最新的. 这表示虽然ACK段没有确认了新的数据,但是它携带了新数据. (3)条件1和2都不成立,通告窗口变大. ACK既没有确认了新的数据,序号也不是最新的. 虽然如此,但是如果对端的接收窗口变大,我们还是要更新发送窗口. 此时ack_seq必须…
package com.zhangxueliang.tcp; import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; /*** * 使用tcp协议发送接收数据 * @author zxlt * */ public class ClientDemo { public static void main(String[] args) thr…
以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的.    这个1500字节被称为链路层的MTU(最大传输单元).    但这并不是指链路层的长度被限制在1500字节,其实这这个MTU指的是链路层的数据区.    并不包括链路层的首部和尾部的18个字节. 因为IP数据报的首部为20字节,所以IP数据报的数据区长度最大为1480字节. 又因为UDP数据报的首部8字节,所以UDP数据报的数据区最大长度为1472字节. 鉴于Internet上的标准MTU值…