基于UDP协议模拟的一个TCP协议传输系统
TCP协议以可靠性出名,这其中包括三次握手建立连接,流控制和拥塞控制等技术。详细介绍如下:
我写的这个系统基于UDP协议模拟了一个TCP协议,所实现的功能如下:
1.三次握手
2.一个计时器,用来判断传输超时行为
3.快速重传
4.能处理不同的MSS(maximum segment size)
5.没有被接收方确认收到的包会被存在发送方,最大可以存MWS个(Maximum Window size)
6.能处理包丢失的情况
7.接收方一旦收到包,立刻发送确认信息给发送方
8.接收方的超时时间是固定的
9.接收方和发送方用log记录发生的一切
详情及代码请看https://github.com/tian-jiang/TCP-Simulating
可以帮助很好的理解三次握手,快速重传,接收方缓存,发送方缓存,滑动窗口移动的规则,MSS等TCP协议中的重要概念。
基于UDP协议模拟的一个TCP协议传输系统的更多相关文章
- 牛客网Java刷题知识点之UDP协议是否支持HTTP和HTTPS协议?为什么?TCP协议支持吗?
不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 ...
- 在网络7层协议中,如果想使用UDP协议达到TCP协议的效果,可以在哪层做文章?(QQ 为什么采用 UDP 协议,而不采用 TCP 协议实现?)
为了解决这题,可以具体看看下面这个讨论. 解灵运工程师 185 人赞同 某次架构师大会上那个58同城做即时通信的人说:原因是因为当时没有epoll这种可以支持成千上万tcp并发连接的技术,所以他们使用 ...
- QQ 为什么以 UDP 协议为主,以 TCP 协议为辅?
QQ既有UDP也有TCP!不管UDP还是TCP,最终登陆成功之后,QQ都会有一个TCP连接来保持在线状态.这个TCP连接的远程端口一般是80,采用UDP方式登陆的时候,端口是8000. UDP协议是无 ...
- UDP协议解析 以及和TCP协议的区别
UDP(User Data Protocol)是传输层的用户数据报协议,有复用和分用以及差错检测的功能. 1) 多路复用(针对发送主机):从不同套接字收集数据块,并为每个数据块封装上首部信息,生成报文 ...
- python笔记8 socket(TCP) subprocess模块 粘包现象 struct模块 基于UDP的套接字协议
socket 基于tcp协议socket 服务端 import socket phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 买 ...
- python TCP协议与UDP协议
1. TCP协议 / UDP协议 1.1 TCP协议 1.可靠.慢.全双工通信 2.建立连接的时候 : 三次握手 3.断开连接的时候 : 四次挥手 4.在建立起连接之后 发送的每一条信息都有回执 为了 ...
- DNS用的是TCP协议还是UDP协议
DNS占用53号端口,同时使用TCP和UDP协议.那么DNS在什么情况下使用这两种协议? DNS在区域传输的时候使用TCP协议,其他时候使用UDP协议. DNS区域传输的时候使用TCP协议: 1.辅域 ...
- 网络协议之:基于UDP的高速数据传输协议UDT
目录 简介 UDT协议 UDT的缺点 总结 简介 简单就是美.在网络协议的世界中,TCP和UDP是建立在IP协议基础上的两个非常通用的协议.我们现在经常使用的HTTP协议就是建立在TCP协议的基础上的 ...
- DNS使用的是TCP协议还是UDP协议(转)
原文链接:DNS使用的是TCP协议还是UDP协议 DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算是个另类.但很少有人知道DNS分别在什么情 ...
随机推荐
- GridView数据绑定
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs& ...
- kali Linux添加add-apt-repository
Debian让用户可以通过一个名为add-apt-repository的应用程序,添加和使用PPA软件库,不过Kali Linux在其默认的程序包列表中并不含有该应用程序.就Kali而言,由于这是个特 ...
- php : 收集整理的非常有用的函数
项目中经常会需要一些让人头疼的函数,作为开发者应该整理一个自己的函数库,在需要之时复制过来即可.以下是收集整理数十个PHP项目中常用的函数 1.PHP加密解密 PHP加密和解密函数可以用来加密一些有用 ...
- 自学 web 前端人怎么找工作?
1,你做过的项目可以体现你的价值.2,你的个人博客可以反映你的思考.3,你的GitHub页面可以展示你的项目.4,你项目中的代码可以看出你编程的风格.1,2,3,4之间有交集.当你能证明,你能创造的价 ...
- md语法之行内代码和代码片
md语法之行内代码和代码片 比如说要在行内写上一句或者半句代码(代码的意思就是某种脚本语言), 用撇号围起来就可以了. 比如: import pandas as pd 写代码片(单独的一块脚本语言)的 ...
- WinForm中MouseEnter和MouseLeave混乱的问题
MouseEnter+MouseLeave不行,我用了MouseMove+MouseLeave,效果一样 最近做个聊天的系统,仿照qq的界面设计,像qq聊天界面中字体.表情.截图等图片,鼠标放上去显示 ...
- PHPStorm技巧篇 -- 全局搜索
自定义快捷键,找到search everywhere 我绑定的是alt+N 设置好并apply后,在项目中使用:快捷键alt+N ,输入自己需要查找的文件或类名或方法名,即可出现相应的选项. so c ...
- Asp.Net_<%%>模式常用语法
1.//弹出对话框.点击转向指定页面 Response.Write("<script>window.alert('该会员没有提交申请,请重新提交!')</script> ...
- jQuery正则的使用方法步骤详解
本文主要和大家分享的就是jQuery学习中正则的使用,正则在jquery里面并没有比javascript多哪些知识,基本上是一样的,只是选择器更好了一点,一起来看看吧. 基础正则 1.正则表达式的创建 ...
- MySQL FUNCTION 整理
-- 返回最后一个INSERT查询中, AUTO_INCREMENT列设置的第一个表的值. SELECT LAST_INSERT_ID();