티스토리 뷰
TCP 3 way handshake
TCP는 데이터를 전송하기 전 안전한 전송을 위해 전송하고자 하는 상대방에게 데이터를 받을 수 있는 상황인지 확인하는 과정이다.
![](https://imgur.com/7fsBTNI.png)
① 송신자는 상대방과 TCP 통신을 하고 싶으면 임의의 랜덤 값을 Sequence number로 설정하고, SYN 플래그를 1로 설정한 뒤 상대방
에게 전송을 합니다.
② 상대방은 송신자가 보낸 패킷을 잘 받았다는 것을 알려주기 위해 Acknowledgement Number필드에 상대방에게 받은 Sequence
Number에 1을 더한 값을 설정합니다. 그리고 상대방도 송신자가 본인이 보낸 값을 잘 받았는지 확인하기 위해 Sequence Number에
본인이 생성한 값을 담아 송신자에게 전달합니다. 이 때 SYN, ACK 플래그에 1을 설정합니다.
③ 송신자는 ACK 에 본인이 보낸 값에 1이 더해진 것을 확인하여 상대방이 본인이 보낸 값을 잘 받았음을 확인합니다. 송신자 역시
수신자에게 잘 받았음을 알려주기 위해 수신자가 보낸 Sequence Number에 1을 더해 Acknowledgement Number에 필드에 설정한
뒤, ACK 플래그역시 1로 설정한 뒤 상대방에게 전송합니다.
TCP 4 way handshake
TCP 연결설정을 했다면 연결 해제 작업역시 해야한다. 연결설정과는 다르게 4개의 과정을 거쳐 TCP 연결 해제를 하게된다.
![](https://imgur.com/SklKJUe.png)
① 연결을 끊기 위해 FIN 플래그가 설정된 패킷을 전송합니다.
② 상대방은 송신자가 보낸 FIN을 받고 ACK 플래그가 설정된 패킷을 송신자에게 보내고 CLOSED_WAIT 상태가 됩니다. 그리고
자신이 남은 데이터가 있다면 전송을 합니다. 송신자는 ACK를 받은 뒤 남은 데이터를 받고 처리한 뒤 수신자가 FIN 플래그가
설정된 패킷을 보낼 때 까지 기다립니다. 송신자는 FIN_WAIT_2 상태가 됩니다.
③ 데이터를 다 전송한 뒤 종료에 동의한다는 뜻으로 FIN 패킷을 보낸 뒤 송신자로부터 ACK을 받기 위해 LAST_ACK 상태로
기다립니다.
④ 송신자는 FIN을 받은 뒤 확인했음을 알리기 위해 ACK 플래그가 설정된 패킷을 전송합니다. 그리고 상대방은 ACK 를 받고
소켓을 닫습니다.
⑤ 송신자는 아직 받지못한 데이터가 있을 수 있기 때문에 TIME_WAIT 상태가 됩니다. TIME_WAIT 가 끝나게 되면 송신자도
CLOSED 상태로 전환합니다.
'면접질문' 카테고리의 다른 글
[DB] 면접 스터디 (1) (0) | 2022.02.28 |
---|---|
MVC 패턴 (0) | 2022.01.30 |
API와 SDK (0) | 2022.01.30 |
[네트워크] HTTP (0) | 2022.01.02 |
[네트워크] TCP와 UDP (0) | 2022.01.01 |
- Total
- Today
- Yesterday
- CodeDeploy
- 프로그래머스
- SpringSecurity
- ddl-auto
- TCP
- Java
- Oracle
- SpringGraphQL
- EC2
- 네이버클라우드
- 람다식
- 트랜잭션격리성
- OS
- 파일업로드설정
- ci/cd
- level0
- ORA-27125
- Travis CI
- AWS
- JPA
- 인덱스
- 기술면접
- 트랜잭션
- N+1
- nginx
- graphql
- 운영체제
- Til
- db
- spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |