-
Notifications
You must be signed in to change notification settings - Fork 0
/
guan-yu-tcpde-yi-xie-wen-ti.html
238 lines (198 loc) · 14.2 KB
/
guan-yu-tcpde-yi-xie-wen-ti.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content="CatsAction" />
<meta property="og:type" content="article" />
<meta name="twitter:card" content="summary">
<meta name="keywords" content="TCP, 网络, " />
<meta property="og:title" content="关于TCP的一些问题"/>
<meta property="og:url" content="./guan-yu-tcpde-yi-xie-wen-ti.html" />
<meta property="og:description" content="TCP如何记录时间戳 TCP首部(不是头部)有一个选项字段。kind = 10时表示时间戳。此选项总共10字节。len表示的总长,包括kind和len本身。 “时间戳值”表示当前系统的时间戳,“时间戳回显应答”是需要确认的数据报对端的发送的时间戳,回传给对端计算数据报传送花费时间。 TCP三次握手超时重传次数 这个又系统自己实现决定。Unix默认是5次,可以通过修改TCP_SYNACK_RETRIES改变。 如何保证TCP的高并发 对于Linux,每次有链接进来时,会新开一个线程(当然可以是进程,但是没必要)。此外,Linux有一个呼入连接请求队列,当应用层来不及处理相应的链接,如果队列还有空间,Linux将同意建立链接,并把它加入请求队列。 RST包作用 正常关闭一个连接使用FIN包,RST包可以用来异常关闭一个连接。收到RST一方将终止改连接,并通知应用层连接复位(不需要给对端任何响应)。 连接到一个不存在的端口,也会收到RST报文。比如主动断开连接一段没有等待2MSL时间,被动关闭的一端重传FIN就会收到RST连接。(次数端口不存在)。 检测半打开连接。如果服务端异常挂掉,重启后会给客户端回送RST报文,客户端能知道连接也被服务端断开,处于半连接状态。 半打开连接和半关闭连接的区别 半打开连接指主动大开端收到被动打开端的ACK确认,而对方还没收到自己ACK确认,此时给对端直接发送数据 …" />
<meta property="og:site_name" content="CatsAction's blog" />
<meta property="og:article:author" content="CatsAction" />
<meta property="og:article:published_time" content="2017-01-12T00:00:00+08:00" />
<meta name="twitter:title" content="关于TCP的一些问题">
<meta name="twitter:description" content="TCP如何记录时间戳 TCP首部(不是头部)有一个选项字段。kind = 10时表示时间戳。此选项总共10字节。len表示的总长,包括kind和len本身。 “时间戳值”表示当前系统的时间戳,“时间戳回显应答”是需要确认的数据报对端的发送的时间戳,回传给对端计算数据报传送花费时间。 TCP三次握手超时重传次数 这个又系统自己实现决定。Unix默认是5次,可以通过修改TCP_SYNACK_RETRIES改变。 如何保证TCP的高并发 对于Linux,每次有链接进来时,会新开一个线程(当然可以是进程,但是没必要)。此外,Linux有一个呼入连接请求队列,当应用层来不及处理相应的链接,如果队列还有空间,Linux将同意建立链接,并把它加入请求队列。 RST包作用 正常关闭一个连接使用FIN包,RST包可以用来异常关闭一个连接。收到RST一方将终止改连接,并通知应用层连接复位(不需要给对端任何响应)。 连接到一个不存在的端口,也会收到RST报文。比如主动断开连接一段没有等待2MSL时间,被动关闭的一端重传FIN就会收到RST连接。(次数端口不存在)。 检测半打开连接。如果服务端异常挂掉,重启后会给客户端回送RST报文,客户端能知道连接也被服务端断开,处于半连接状态。 半打开连接和半关闭连接的区别 半打开连接指主动大开端收到被动打开端的ACK确认,而对方还没收到自己ACK确认,此时给对端直接发送数据 …">
<title>关于TCP的一些问题 ·
CatsAction's blog
</title>
<link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet">
<link rel="icon" type="image/x-icon" href="./theme/image/logo.ico" />
<link rel="stylesheet" type="text/css" href="./theme/css/elegant.prod.css" media="screen">
<link rel="stylesheet" type="text/css" href="./theme/css/custom.css" media="screen">
</head>
<body>
<div id="content">
<div class="navbar navbar-static-top">
<div class="navbar-inner">
<div class="container-fluid">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="./"><span class=site-name>CatsAction's blog</span></a>
<div class="nav-collapse collapse">
<ul class="nav pull-right top-menu">
<li >
<a href=
.
>Home</a>
</li>
<li ><a href="./categories.html">Categories</a></li>
<li ><a href="./tags.html">Tags</a></li>
<li ><a href="./archives.html">Archives</a></li>
<li><form class="navbar-search" action="./search.html" onsubmit="return validateForm(this.elements['q'].value);"> <input type="text" class="search-query" placeholder="Search" name="q" id="tipue_search_input"></form></li>
</ul>
</div>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row-fluid">
<div class="span1"></div>
<div class="span10">
<article itemscope>
<div class="row-fluid">
<header class="page-header span10 offset2">
<h1>
<a href="./guan-yu-tcpde-yi-xie-wen-ti.html">
关于TCP的一些问题
</a>
</h1>
</header>
</div>
<div class="row-fluid">
<div class="span8 offset2 article-content">
<h5>TCP如何记录时间戳</h5>
<p>TCP首部(不是头部)有一个选项字段。kind = 10时表示时间戳。此选项总共10字节。len表示的总长,包括kind和len本身。</p>
<p><center><img alt="mysql_innodb_myisam_index" src="./images/tcp_timestamp.jpg"></center></p>
<p>“时间戳值”表示当前系统的时间戳,“时间戳回显应答”是需要确认的数据报对端的发送的时间戳,回传给对端计算数据报传送花费时间。</p>
<h5>TCP三次握手超时重传次数</h5>
<p>这个又系统自己实现决定。Unix默认是5次,可以通过修改TCP_SYNACK_RETRIES改变。</p>
<h5>如何保证TCP的高并发</h5>
<p>对于Linux,每次有链接进来时,会新开一个线程(当然可以是进程,但是没必要)。此外,Linux有一个呼入连接请求队列,当应用层来不及处理相应的链接,如果队列还有空间,Linux将同意建立链接,并把它加入请求队列。</p>
<h5>RST包作用</h5>
<ul>
<li>正常关闭一个连接使用FIN包,RST包可以用来异常关闭一个连接。收到RST一方将终止改连接,并通知应用层连接复位(不需要给对端任何响应)。</li>
<li>连接到一个不存在的端口,也会收到RST报文。比如主动断开连接一段没有等待2MSL时间,被动关闭的一端重传FIN就会收到RST连接。(次数端口不存在)。</li>
<li>检测半打开连接。如果服务端异常挂掉,重启后会给客户端回送RST报文,客户端能知道连接也被服务端断开,处于半连接状态。</li>
</ul>
<h5>半打开连接和半关闭连接的区别</h5>
<p>半打开连接指主动大开端收到被动打开端的ACK确认,而对方还没收到自己ACK确认,此时给对端直接发送数据,会被丢掉。 </p>
<p>半关闭连接指一方发送FIN并收到了ACK,此时表示自己不再发送数据,但是还是可以正常对端发送过来的数据。</p>
<hr />
<aside>
<nav>
<ul class="articles-timeline">
<li class="previous-article">« <a href="./rediszai-xiang-mu-zhong-de-shi-yong.html"
title="Previous: Redis在项目中的使用">Redis在项目中的使用</a></li>
<li class="next-article"><a href="./huan-cun-wen-ti-ji-chu-li.html"
title="Next: 缓存问题及处理">缓存问题及处理</a> »</li>
</ul>
</nav>
</aside>
</div>
<section id="article-sidebar" class="span2">
<h4>Published</h4>
<time itemprop="dateCreated" datetime="2017-01-12T00:00:00+08:00"> 1
12, 2017</time>
<!---->
<h4>Category</h4>
<a class="category-link"
href="./categories.html#wang-luo-ref">网络</a>
<h4>Tags</h4>
<ul class="list-of-tags tags-in-article">
<li><a href="./tags.html#tcp-ref">TCP
<span>1</span>
</a></li>
</ul>
<h4>Stay in Touch</h4>
<div id="sidebar-social-link">
<a href="mailto:[email protected]" title="My Email Address" target="_blank" rel="nofollow noopener noreferrer">
<svg xmlns="http://www.w3.org/2000/svg" aria-label="Mail" role="img" viewBox="0 0 512 512"><rect width="512" height="512" rx="15%" fill="#328cff"/><path d="m250 186c-46 0-69 35-69 74 0 44 29 72 68 72 43 0 73-32 73-75 0-44-34-71-72-71zm-1-37c30 0 57 13 77 33 0-22 35-22 35 1v150c-1 10 10 16 16 9 25-25 54-128-14-187-64-56-149-47-195-15-48 33-79 107-49 175 33 76 126 99 182 76 28-12 41 26 12 39-45 19-168 17-225-82-38-68-36-185 67-248 78-46 182-33 244 32 66 69 62 197-2 246-28 23-71 1-71-32v-11c-20 20-47 32-77 32-57 0-108-51-108-108 0-58 51-110 108-110" fill="#fff"/></svg>
</a>
<a href="https://github.com/boyaziqi" title="catsaction Github Repository" target="_blank" rel="nofollow noopener noreferrer">
<svg xmlns="http://www.w3.org/2000/svg" aria-label="GitHub" role="img" viewBox="0 0 512 512"><rect width="512" height="512" rx="15%" fill="#1B1817"/><path fill="#fff" d="M335 499c14 0 12 17 12 17H165s-2-17 12-17c13 0 16-6 16-12l-1-50c-71 16-86-28-86-28-12-30-28-37-28-37-24-16 1-16 1-16 26 2 40 26 40 26 22 39 59 28 74 22 2-17 9-28 16-35-57-6-116-28-116-126 0-28 10-51 26-69-3-6-11-32 3-67 0 0 21-7 70 26 42-12 86-12 128 0 49-33 70-26 70-26 14 35 6 61 3 67 16 18 26 41 26 69 0 98-60 120-117 126 10 8 18 24 18 48l-1 70c0 6 3 12 16 12z"/></svg>
</a>
<a href="https://www.linkedin.com/feed/" title="My LinkedIn" target="_blank" rel="nofollow noopener noreferrer">
<svg xmlns="http://www.w3.org/2000/svg" aria-label="LinkedIn" role="img" viewBox="0 0 512 512" fill="#fff"><rect width="512" height="512" rx="15%" fill="#0077b5"/><circle cx="142" cy="138" r="37"/><path stroke="#fff" stroke-width="66" d="M244 194v198M142 194v198"/><path d="M276 282c0-20 13-40 36-40 24 0 33 18 33 45v105h66V279c0-61-32-89-76-89-34 0-51 19-59 32"/></svg>
</a>
</div>
<h4>Friendship Links</h4>
<ul class="list-of-tags tags-in-article">
<li>
<a href="https://leetcode-cn.com/" title="力扣中国站点" target="_blank" rel="nofollow noopener noreferrer">
LeetCode
</a>
</li>
<li>
<a href="https://coolshell.cn/about" title="陈皓酷壳" target="_blank" rel="nofollow noopener noreferrer">
CoolShell
</a>
</li>
<li>
<a href="https://yikun.github.io/" title="姜毅坤博客" target="_blank" rel="nofollow noopener noreferrer">
Yikun
</a>
</li>
<li>
<a href="https://www.nowcoder.com/" title="牛客网" target="_blank" rel="nofollow noopener noreferrer">
牛客网
</a>
</li>
</ul>
</section>
</div>
</article>
</div>
<div class="span1"></div>
</div>
</div>
</div>
<footer>
<div>
<span class="site-name">CatsAction's blog</span> - It's a wonderful world
</div>
<div id="fpowered">
Powered by: <a href="http://getpelican.com/" title="Pelican Home Page" target="_blank" rel="nofollow noopener noreferrer">Pelican</a>
Theme: <a href="https://elegant.oncrashreboot.com/" title="Theme Elegant Home Page" target="_blank" rel="nofollow noopener noreferrer">Elegant</a>
</div>
</footer> <script src="//code.jquery.com/jquery.min.js"></script>
<script src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
<script>
function validateForm(query)
{
return (query.length > 0);
}
</script>
<script>
(function () {
if (window.location.hash.match(/^#comment-\d+$/)) {
$('#comment_thread').collapse('show');
}
})();
window.onhashchange=function(){
if (window.location.hash.match(/^#comment-\d+$/))
window.location.reload(true);
}
$('#comment_thread').on('shown', function () {
var link = document.getElementById('comment-accordion-toggle');
var old_innerHTML = link.innerHTML;
$(link).fadeOut(200, function() {
$(this).text('Click here to hide comments').fadeIn(200);
});
$('#comment_thread').on('hidden', function () {
$(link).fadeOut(200, function() {
$(this).text(old_innerHTML).fadeIn(200);
});
})
})
</script>
</body>
<!-- Theme: Elegant built for Pelican
License : MIT -->
</html>