[그림 출처: 정보통신기술용어해설]
Sequence Number, Acknowledgement Number 필드가 있다.
TCP에는 Option 필드가 있는데, 잘 안붙는데 4byte씩 최대 10개까지 붙을 수 있다. 그래서 20byte ~ 60byte까지 가능
Flag
"나 너한테 보내도 돼?"
"어 가능해!"
"안돼ㅠ"
"지금 보내는 데이터는 중요한 정보야"
등등등...
이런 정보를 지정하는 것이 바로 이 flag값이다.
지금 보내는 데이터가 우선순위가 높은 정보가 포함되어 있다.
좀 더 빨리 처리해달라는 요청
물어본 것에 대한 "승인"을 나타내는 비트
"응 보내도 돼!"
TCP 버퍼가(정보를 받을 수 있는 공간) 일정 이상 쌓여야 가능한데,
상관없이 그냥 밀어넣겠다는 뜻
상대방과 연결이 되어있는 상태에서 추가적으로 데이터를 주고받으려고 하는데 문제가 발생했으니 이 연결을 초기화하자.
상대방과 연결을 시작할 때 무조건 사용하는 flag
Sync bit가 보내고 난 이후부터 서로의 상태를 동기화 시킨다.
"받았어?" "어 받았어" "또 보낸다" "응 보내도 돼"..
데이터를 다 주고받은 다음 연결을 끊을 때 사용하는 비트
3-way handshake
클라이언트가 서버에게 요청 패킷을 보낸다.
seq num: 100, ack num:0, sync flag
seq(clnt->serv)를 처음 보낼 때는 랜덤한 값!(100)
서버가 클라이언트의 요청을 받아들이는 패킷을 보내고
seq num: 2000, ack num:101(serv seq num+1), sync+ack flag
seq(serv->clnt)를 처음 보낼 때는 랜덤한 값!(100)
클라이언트는 이를 최종적으로 수락하는 패킷을 보낸다.
seq num: 101(serv seq num+1), ack num:2001(clnt seq num+1), ack flag
위의 3개의 과정을 3-way handshake라고 부른다.
만약 clnt가 아닌 다른 누군가가 저 sequence number로
TCP를 이용한 통신과정
ex)
clnt -> serv
"갯마을 차차차 12화"를 요청(데이터 크기:100)
아까 3-way hand shake를 마친 후 S, A 그대로 사용
S:101, A:2001, PUSH+ACK
SYNC SENT
serv -> clnt
"영상"으로 답장(데이터 크기: 500)
S: 2001, A: 101+100
SYNC RECEIVED
clnt -> serv
잘 받았어!
s: 201, S: 2001+500
ESTABLISHED
TCP 상태전이도
[그림 출처]
LISTEN: clnt가 요청하면 serv가 항상 듣고있는 상태
ESTABLISHED: clnt-serv 연결이 수립된 상태