* SQL Server の UNIQUE 制約は SQL 標準に準拠してない
この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [MS SQL Server]
SQL Server2000 では、NULL 同士でもユニーク制約 (一意性制約)にひっかかる。SQL Server2000 にこんな落とし穴があるなんて思わなかった。危ないところだった。
PostgreSQL 7.3.2 ユーザガイド Chapter 2. データ定義 2.4.3. 一意性制約
http://www.postgresql.jp/document/pg732doc/user/ddl-constrai ...
NULL は NULL なんだから重複って概念はおかしい。
PostgreSQL 7.3.2 ユーザガイド Chapter 2. データ定義 2.4.3. 一意性制約
http://www.postgresql.jp/document/pg732doc/user/ddl-constrai ...
一般に、制約の対象となる列について、同じ値をもつ行が 2 行以上ある場合は、
一意性制約違反になります。
しかし、ここでは NULL 値は等価とは見なされません。
つまり、複数列での一意性制約では、制約対象の列の少なくとも 1 つに
NULL 値をもつ行を無限に格納することができるということです。
この振る舞いは SQL 標準に準拠していますが、この規則に従わない
SQL データベースもあるそうです。
ですから、移植する予定のアプリケーションを開発する際には注意してください。
- 検証 SQL
DROP TABLE uniq_test;
CREATE TABLE uniq_test(
int1 int,
int2 int,
UNIQUE (int1, int2)
);
INSERT INTO uniq_test (int1, int2) VALUES (NULL, 1);
INSERT INTO uniq_test (int1, int2) VALUES (NULL, 1);
- PostgreSQL 7.2.1 での結果
hiroaki=> DROP TABLE uniq_test;
DROP
hiroaki=> CREATE TABLE uniq_test(
hiroaki(> int1 int,
hiroaki(> int2 int,
hiroaki(> UNIQUE (int1, int2)
hiroaki(> );
NOTICE: CREATE TABLE / UNIQUE will create implicit index 'uniq_test_int1_key' for table 'uniq_test'
CREATE
hiroaki=> INSERT INTO uniq_test (int1, int2) VALUES (NULL, 1);
INSERT 31376096 1
hiroaki=> INSERT INTO uniq_test (int1, int2) VALUES (NULL, 1);
INSERT 31376097 1
- SQL Server2000 での結果
(1 件処理されました)
サーバー : メッセージ 2627、レベル 14、状態 2、行 1
UNIQUE KEY 違反、制約 'UQ__uniq_test__65851878': オブジェクト 'uniq_test' には重複したキーは挿入できません。
ステートメントは終了されました。
NULL は NULL なんだから重複って概念はおかしい。
* SQL の COALESCE
この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [SQL] [Postgres] [MS SQL Server]
COALESCE() は、引数のうち NULL でないものを返す。CASE や NULLIF を使っても同じことができるけど、こっちの方が簡潔。可変長の複数の引数を指定できて便利。
http://www.postgresql.jp/document/pg734doc/user/functions-co ...
COALESCE
http://www.microsoft.com/japan/msdn/library/ja/tsqlref/ts_ca ...
COALESCE の発音は「こぅあれす」なんだけど、「す」のところが SCE になっていることが覚えられない原因だと思う。最初は「こぉりーす」と誤読していたこともスペルミスの原因かも。
coalesce goo 英和辞典
http://dictionary.goo.ne.jp/search.php?MT=coalesce&kind= ...
- COALESCE リファレンス
PostgreSQL 7.3.4 ユーザガイド Chapter 6. 関数と演算子 条件式http://www.postgresql.jp/document/pg734doc/user/functions-co ...
6.12.2. COALESCE
COALESCE(value [, ...])
COALESCE 関数は、NULL でない自身の最初の引数を返します。 データを表示の目的で取り出す際、NULL 値の代わりにデフォルト値を使う場合、時として便利なことがあります。 その例です。
SELECT COALESCE(description, short_description, '(none)') ...
COALESCE
http://www.microsoft.com/japan/msdn/library/ja/tsqlref/ts_ca ...
- COALESCE のスペルが覚えられない
ところで、私は COALESCE のスペルがなぜか覚えられないため、この記事を書いた。COLESE とか COALESE とか COLESCE などと書いてしまい、文法エラーになることが多かった。最近では MS SQL Server 付属のクエリアナライザで SQL を書くようになり、キーワード色づけの恩恵を受けるようになったため間違いが減ったけど。それでも時々忘れることがあって、そのときはクエリアナライザの顔色を伺いながらタイプしている。キーワードに色が付いたら正解スペル、色が付かなかったら間違いスペルだ。まさに顔色を伺ってる感じだ。COALESCE の発音は「こぅあれす」なんだけど、「す」のところが SCE になっていることが覚えられない原因だと思う。最初は「こぉりーす」と誤読していたこともスペルミスの原因かも。
coalesce goo 英和辞典
http://dictionary.goo.ne.jp/search.php?MT=coalesce&kind= ...
Windowsに“超特大”ホール,「SQL Slammer」以上の被害が出る恐れあり
http://itpro.nikkeibp.co.jp/members/ITPro/SEC_CHECK/20030722 ...
セキュリティホール memo
http://www.st.ryukoku.ac.jp/%7Ekjm/security/memo/2003/07.htm ...
http://www.st.ryukoku.ac.jp/%7Ekjm/security/memo/2003/07.htm ...
http://itpro.nikkeibp.co.jp/members/ITPro/SEC_CHECK/20030722 ...
セキュリティホール memo
http://www.st.ryukoku.ac.jp/%7Ekjm/security/memo/2003/07.htm ...
http://www.st.ryukoku.ac.jp/%7Ekjm/security/memo/2003/07.htm ...
動的に拡張できる配列があり、その中身を join するという処理を
C# で書いてみた。perl だとすごく簡潔だけど、 C# だと型の変換が面倒。
StringBuilder か何かを使えばもっと簡単に書けるのかもしれない。
あ、string の配列へのキャストは、文字列定数を使わなくて済むので以下の方がきれいかな。
C# で書いてみた。perl だとすごく簡潔だけど、 C# だと型の変換が面倒。
StringBuilder か何かを使えばもっと簡単に書けるのかもしれない。
static void Main(string[] args) {
ArrayList al = new ArrayList();
for (int i = 0; i < 5; ++i) {
al.Add(i);
}
string str = String.Join(@" OR ", (string[])al.ToArray(Type.GetType("System.String")));
Console.WriteLine(str);
}
あ、string の配列へのキャストは、文字列定数を使わなくて済むので以下の方がきれいかな。
(string[]) al.ToArray(typeof(string));
http://www.atmarkit.co.jp/fdotnet/basics/regex02/regex02_01. ...
C# だと、正規表現によるキャプチャを実行した場合、マッチした部分を格納するリストの0番目の要素には、マッチした部分全体が格納される。
以下のサンプルコードのように複数箇所をキャプチャする場合、最初のカッコでキャプチャした文字列が格納されるのは m.Groups[1].Value である。また、マッチしなかった場合、m.Groups[0].Value には空文字 "" が格納されてしまう。
マッチした個数によって処理を変える場合、「リストの要素数が 1より大きいかどうか」で判定しなければならない。perl と異なるので要注意。
m.Groups[0].Value は "栃木県真岡市一万人町一万人プール二丁目"、
m.Groups[1].Value は "栃木県"、
m.Groups[2].Value は "真岡市一万人町一万人プール二丁目" になる。
C# だと、正規表現によるキャプチャを実行した場合、マッチした部分を格納するリストの0番目の要素には、マッチした部分全体が格納される。
以下のサンプルコードのように複数箇所をキャプチャする場合、最初のカッコでキャプチャした文字列が格納されるのは m.Groups[1].Value である。また、マッチしなかった場合、m.Groups[0].Value には空文字 "" が格納されてしまう。
マッチした個数によって処理を変える場合、「リストの要素数が 1より大きいかどうか」で判定しなければならない。perl と異なるので要注意。
- 正規表現によるキャプチャのサンプル
正規表現によるキャプチャのサンプル。string str2 = "栃木県真岡市一万人町一万人プール二丁目";
string REGEX_PATTERN = @"^(栃木県|東京都)(.*)";
Match m = Regex.Match(str2, REGEX_PATTERN);
Console.WriteLine(m.Groups[0].Value);
m.Groups[0].Value は "栃木県真岡市一万人町一万人プール二丁目"、
m.Groups[1].Value は "栃木県"、
m.Groups[2].Value は "真岡市一万人町一万人プール二丁目" になる。
- 没になったコード
/*
MatchCollection mc = Regex.Matches(address1, REGEX_GET_PREF);
string s = mc[0].Value;
Console.WriteLine(s);
s = mc[0].NextMatch().Value;
Console.WriteLine(s);
Match ms = Regex.Match(address1, REGEX_GET_PREF);
Console.WriteLine(ms.Groups[0].Value);
string str2 = "栃木県真岡市一万人町一万人プール二丁目";
string REGEX_PATTERN = @"^(栃木県|東京都)(.*)";
Match m = Regex.Match(str2, REGEX_PATTERN);
Console.WriteLine(m.Groups[0].Value);
*/
特集:第1回 PostgreSQLで学ぶSQLデータベースの操作
http://www.itmedia.co.jp/enterprise/0307/18/epn20.html
Tomcat(JSP)との連携も解説する予定だそうな。
http://www.itmedia.co.jp/enterprise/0307/18/epn20.html
Tomcat(JSP)との連携も解説する予定だそうな。
【連載 】PostgreSQL パフォーマンスチューニング
https://www.stackasterisk.jp/tech/dataBase/postgresTuning01_ ...
https://www.stackasterisk.jp/tech/dataBase/postgresTuning01_ ...
つまり、winny の匿名性の肝は転送によるファイルの一次公開者の隠蔽にあるということ。
MXの次はなんなんだ? Part165
http://tmp.2ch.net/test/read.cgi/download/1058199380/51
MXの次はなんなんだ? Part165
http://tmp.2ch.net/test/read.cgi/download/1058199380/51
51 :47 ◆KbtLZwerNc :03/07/15 01:57 ID:hsfdr3mD
ちなみにβ5.01→β5.02でBBSのハッシュ値が変わるので5.02に変えた直後は
5.01が放出したキーが消えるまで同じスレが二つに見えるはずです。
あと、匿名性がまた話題になっているようですが、nyの匿名性に暗号はほぼ関係ありません。
もしWinnyのソースを全て公開して暗号を全て取り除いた状態でもnyの匿名性は変わりません。
通信内容、キャッシュなどを全て解析しても匿名性は保たれように設計されています。
Winnyの匿名性の肝は転送動作であって暗号ではないからです。
わざわざ各所を暗号化したり本体の改造を困難にしたり、通信内容を暗号化しているのは
単に解析を困難にさせるためです。そして、なぜ解析を困難にするかというと、
解析されて改造されるとファイル共有効率が落ちるからです
(ただ、キャッシュの暗号化は管理責任の問題があるかな?)
あと、Winnyが起動されているノード情報はもちろんTCPでコネクション繋いでいる以上
ログを取れば判明しますが、これは初期ノードリスト解析することと同じことです。
ここは一番暗号の弱いところで解析されてもほとんど影響の無い部分です。
初期ノードを暗号化しているのは気分的な問題(公開の際の心理的影響考慮)であって、
ここはデコードされてもほぼ匿名性に影響ないと思います。
それでわかるのはそこでnyが起動されているということだけですので。
- SQL ではエスケープしなければならない文字がある。
今回は、MS SQL Server での文法をメモする。Postgres での文法は、以下を参照。
[pgsql-jp: 26535] % で始まる文字の LIKE 検索
http://ml.postgresql.jp/pipermail/pgsql-jp/2002-June/001677. ...
PostgreSQL 7.3.2 ユーザガイド Chapter 6. 関数と演算子
http://search.net-newbie.com/pgsql/functions-matching.html
- ' のエスケープ
クエリ中に ' がある場合、' を付加する。例)
クエリが I'll be back のとき
SELECT * FROM table WHERE string = 'I''ll be back';
- LIKE で使われるメタ文字のエスケープ
クエリ中に以下の文字列がある場合、# を付加する。% (パーセント)
_ (アンダーバー)
[ (角カッコ)
] (角カッコ)
^ (ハット)
# (エスケープ文字自体をエスケープするには、同じ文字を続ける)
# を選んだ意味は特にない。他の文字でエスケープしたければ、 ESCAPE 句で指定できる。
ESCAPE '#'
例)
クエリが 100% のとき。
LIKE '%100#%%' ESCAPE '#'
クエリが 100# のとき。
LIKE '%100##%' ESCAPE '#'
クエリが K's dining #100 のとき
LIKE '%K''s dining ##100%' ESCAPE '#'
- テストに使った SQL
CREATE TABLE esc (string VARCHAR(100));INSERT INTO esc (string) VALUES ('100%');
INSERT INTO esc (string) VALUES ('it is ');
INSERT INTO esc (string) VALUES ('%');
INSERT INTO esc (string) VALUES ('%%%');
INSERT INTO esc (string) VALUES ('[');
INSERT INTO esc (string) VALUES (']');
INSERT INTO esc (string) VALUES ('^');
INSERT INTO esc (string) VALUES ('^ff');
INSERT INTO esc (string) VALUES ('10_');
INSERT INTO esc (string) VALUES ('_');
INSERT INTO esc (string) VALUES ('others');
INSERT INTO esc (string) VALUES ('表');
INSERT INTO esc (string) VALUES ('#1');
SELECT string FROM esc;
SELECT string FROM esc WHERE string LIKE '%#%';
SELECT string FROM esc WHERE string LIKE '%##%' ESCAPE '#';
[linux-users:30811] Re: about warm and cold reboot
http://search.luky.org/linux-users.3/msg00811.html
紅茶を淹れるときのおまじないに、
One for me, one for you, one for pot (god). というのがある。
ロンドンの水は硬水なので、最後の one for pot がないと
よく抽出できないことから、このおまじないができたそうだ。
これを sync に置き換えたものが sync for me。
sync; sync; sync; shutdown ...
と入力することへの言葉遊びといったところか。
http://search.luky.org/linux-users.3/msg00811.html
紅茶を淹れるときのおまじないに、
One for me, one for you, one for pot (god). というのがある。
ロンドンの水は硬水なので、最後の one for pot がないと
よく抽出できないことから、このおまじないができたそうだ。
これを sync に置き換えたものが sync for me。
sync; sync; sync; shutdown ...
と入力することへの言葉遊びといったところか。
スマートな文字列処理のための正規表現入門(前編)
http://www.atmarkit.co.jp/fdotnet/basics/regex01/regex01_01. ...
http://www.atmarkit.co.jp/fdotnet/basics/regex01/regex01_01. ...
ログというのは行単位が基本。しかし、一部には複数行にまたがって出力されるものもある。そんなときにどう grep するかを考えた。JM で grep の man を見てみたが、良さそうなオプションは無かった。こんなときは perl で one liner を書くと楽だ。
grep したいファイルが単数の場合
grep したいファイルが複数の場合
デリミタが改行2つなので split() したら改行が消えて行が繋がってしまって残念な思いをするのを回避したい場合。なんか世話が焼きすぎな気もするが、以下のようにさらに \n\n で join() してやればいい。
-0777 で セパレータを無効にしている。すなわちファイル全体が一つになる。
-n と -e だけだと、-e で指定したスクリプトが標準入力から一行読み込まれる度に実行される。一方、-0777 と -n を組み合わせると、とりあえず標準入力から全行を読み込み、$_ に格納し、一度だけスクリプトが実行される、という動きをするようだ。
あとは全体を指定したデリミタで split() して、配列に格納。配列を grep() してマッチした要素だけを取得して print してる。
一度にファイルを読み込んでしまうなど、効率の面ではあまり良くないけど、気にするな。
- 複数行にわたるログの例。
架空のものだけど。Date: 11/Jul/2003:09:05:21 +0900
Protocol: HTTP/1.1
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ja-JP; rv:1.4b)
Status: 200
--------
Date: 11/Jul/2003:09:05:30 +0900
Protocol: HTTP/1.1
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ja-JP; rv:1.4b)
Status: 304
--------
Date: 11/Jul/2003:09:06:00 +0900
Protocol: HTTP/1.1
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ja-JP; rv:1.4b)
Status: 304
- デリミタ(区切り文字)で split する
明確な区切り文字があれば、そこで分割してから grep してやればいい。以下、デリミタが -------- で、linux という文字列が入ってるブロックを grep する例。grep したいファイルが単数の場合
$ perl -0777 -ne 'print grep(/linux/i, split("--------", $_));' log.2003.07.10
grep したいファイルが複数の場合
$ perl -0777 -ne 'print grep(/linux/i, split("--------", $_));' log.2003.07*
- デリミタが改行2つの場合 \n\n
\n\n\ は、http リクエストやレスポンスにおいてヘッダとボディを分ける時にも使われる。$ perl -0777 -ne 'print grep(/linux/i, split("\n\n", $_));' < log.2003.07.10.2lf_delimiter
デリミタが改行2つなので split() したら改行が消えて行が繋がってしまって残念な思いをするのを回避したい場合。なんか世話が焼きすぎな気もするが、以下のようにさらに \n\n で join() してやればいい。
$ perl -0777 -ne 'print join("\n\n", grep(/linux/i, split("\n\n", $_)));' < /cygdrive/n/pfexport.txt
- 解説
-n で全行を標準入力から取得している。-0777 で セパレータを無効にしている。すなわちファイル全体が一つになる。
-n と -e だけだと、-e で指定したスクリプトが標準入力から一行読み込まれる度に実行される。一方、-0777 と -n を組み合わせると、とりあえず標準入力から全行を読み込み、$_ に格納し、一度だけスクリプトが実行される、という動きをするようだ。
$ perl -ne 'print "enjoy perl!"' < /cygdrive/n/pfexport.txtとしたとき、enjoy perl! は行数分 print されたが、
$ perl -0777 -ne 'print "enjoy perl!"' < /cygdrive/n/pfexport.txtだと一度だけしか print されなかった。
あとは全体を指定したデリミタで split() して、配列に格納。配列を grep() してマッチした要素だけを取得して print してる。
一度にファイルを読み込んでしまうなど、効率の面ではあまり良くないけど、気にするな。
amazon のウィッシュリストに追加。収録曲は旧版と同じだが、PV の入った DVD が付いている。
今までできなかったけど、google で調べてちょっと設定したら使えてしまった。
http://web.archive.org/web/20030422054541/http://www.niwa.dn ... や Redhat のマニュアルが参考になった。
2002-08-30 に一度試みて失敗してるから、足かけ約一年。何やってるんだ私は。
ちなみに、公開してるのはこれだけ。
/home/samba/public/music (ro,all_squash)
HP のサイトにトラブルシューティング情報があったのでメモ。
[10.X/11.X] NFSマウント時のエラー server not responding
http://www3.jpn.hp.com/cgi/service/knavi/doc_disp.cgi?catego ...
http://web.archive.org/web/20030422054541/http://www.niwa.dn ... や Redhat のマニュアルが参考になった。
2002-08-30 に一度試みて失敗してるから、足かけ約一年。何やってるんだ私は。
ちなみに、公開してるのはこれだけ。
/home/samba/public/music (ro,all_squash)
- サーバー側の設定
NFSサービスがインストールされているか確認する。
#rpm -qa |grep netcfg-nfsexports
#rpm -qa |grep nfs-utils
#rpm -qa |grep portmap
いずれもインストールされていなかったら新規インストールする。
exportsファイルにエクスポートするディレクトリ/homeを指定する。
#vi /etc/exports
----------------------------------------------
/home 192.168.xxx.0/255.255.255.0(rw,no_root_squash)
----------------------------------------------
保存終了する。
turboserviceでportmapサービスを開始する。
nfsサービスを開始する。
nfslockサービスを開始する。
NFSが動作しているか確認する。
#rpcinfo -p
これでportmapper,rquotad,mountd,nfs,nlockmgr,statusがリストにあればOK。
もし,/etc/exportsを再編集したらnfsdに再読み込みさせるために次のコマンドを実行する。
#exportfs -ra
turboserviceでランレベル3のportmap,nfs,nfslockを有効にする。
- クライアント側の設定
portmapperとnfsロッキングが動作しているか確認する。
#rpcinfo -p
portmapper,nlockmgrがリストにあればOK。
もしなければturboserviceでportmapとnfslockを開始する。
マウントポイントを作成する。
#mkdir /mnt/server
マウントする。
#mount -t nfs server:/home /mnt/server
以上でLinuxクライアントからNFSサーバーのエクスポートディレクトリにアクセスすることができる。
/etc/fstabに次の記述を追加する。
--------------------------------------------------
server:/home /mnt/server nfs defaults 0 0
--------------------------------------------------
turbofscfgで/mnt/serverのマウントポイントをマウントする。
turboserviceでランレベル3,4,5のportmapを有効にする。
- 以前出てたエラーは何だったのかわからないけど
2003-07-12 で出てたエラーの原因は、今となってはわからない。おそらく、RPC サービスが立ち上がっていなかったか、/etc/hosts.allow でアクセスを許可する記述が欠けいていたかのどちらかだと思う。ちなみにエラーメッセージは以下の通り。nfs: server 10.3.31.54 still not responding
nfs_get_root: getattr error = 5
NFS: cannot create RPC transport.
nfs: server 10.3.31.54 is not responding
HP のサイトにトラブルシューティング情報があったのでメモ。
[10.X/11.X] NFSマウント時のエラー server not responding
http://www3.jpn.hp.com/cgi/service/knavi/doc_disp.cgi?catego ...
- OS 起動時に自動で nfs マウントする
/etc/rc.d に以下の行を追加。mount -t nfs 10.69.130.204:/music /mnt/sonic-server/root_music
mount -t nfs 10.224.68.204:/home/hiroaki/music /mnt/sonic-server/home_hiroaki_music
mount -t nfs 10.158.212.89:/backup /mnt/sfu_nfs
winny2 の掲示板機能をウェブ上で提供するサイト。
http://nych.info/
http://nych.info/
当サイトではP2Pを利用した匿名掲示板、WinnyBBSをWEB上から回覧する為のゲートウェイページを設置しています。
http://www.itmedia.co.jp/enterprise/0307/11/epn01.html
LVM は今まで全く使ったことがない。そもそも使う必要がなかったし。
でもスナップショットは素晴らしい機能だと思う。業務では役に立ちそうな予感。
kernel 2.6 では LVM 2.0 が搭載される。その頃には使ってるかもしれないな。
LVM は今まで全く使ったことがない。そもそも使う必要がなかったし。
でもスナップショットは素晴らしい機能だと思う。業務では役に立ちそうな予感。
kernel 2.6 では LVM 2.0 が搭載される。その頃には使ってるかもしれないな。
[redhat:12685] Re: LinuxでのAuto Loginは可能でしょうか?
sl.sakura.ne.jp/archives/redhat/?12685
http://www.otsune.com/diary/2003/07/10.html#200307104
/etc/gettytabにal=ユーザー名を追加すれば常にログイン状態。
sl.sakura.ne.jp/archives/redhat/?12685
http://www.otsune.com/diary/2003/07/10.html#200307104
/etc/gettytabにal=ユーザー名を追加すれば常にログイン状態。
cat /proc/net/dev の値を使っているようだ。確認した環境は以下の通り。
32bit で宣言されているようなので、4GB を超えると 0に戻ってしまう。64bit になれば 2^64 = 18446744073709551616 byte = 16384 Peta byte まで増えるので、長期稼働しているファイルサーバでこの値を見て、「たくさん仕事したね」と褒めてあげられるんだけどな。
[hiroaki@sonic hiroaki]$ uname -a
Linux sonic 2.2.18-2 #1 Wed Mar 14 12:38:41 JST 2001 i586 unknown
32bit で宣言されているようなので、4GB を超えると 0に戻ってしまう。64bit になれば 2^64 = 18446744073709551616 byte = 16384 Peta byte まで増えるので、長期稼働しているファイルサーバでこの値を見て、「たくさん仕事したね」と褒めてあげられるんだけどな。
どちらもコジマ NEW 東店で購入。
MDR-E931LP はシルバーが欲しかったけど、在庫はブラックのみだった。5%税込み2079円。
CD-RW は MITSUBISHI の700MB 5枚パック。5%税込み609円。安くなったものだ。
TCP の 3ウェイハンドシェイク (3way handshake) の SYN や ACK の略称ではない名前。
SYN: synchronize
ACK: acknowledge
RFC 793 TRANSMISSION CONTROL PROTOCOL
サーバは SYN + ACK をクライアントに返信する。
クライアントは ACK をサーバに送信する。これで TCP 接続が成立する。
SYN: synchronize
ACK: acknowledge
RFC 793 TRANSMISSION CONTROL PROTOCOL
- 3ウェイハンドシェイクによる接続の流れ
クライアントが SYN をサーバに送信する。サーバは SYN + ACK をクライアントに返信する。
クライアントは ACK をサーバに送信する。これで TCP 接続が成立する。