티스토리 뷰
앞서 포스팅한 개념을 토대로 간단하게 문제를 풀어보자.
- 문제 1.
client(seq : 3000)
server(seq : 4000)
c -> s
hello
c <- s
hi
c -> s
bye
c <- s
bye
종료 요청은 server가 client 에게 하였음.
풀이
연결->데이터 삽입->종료 순으로 직접 그리면서 풀어보겠다.
필자의 악필을 양해해주시면 감사하겠습니다.
Q1. "PUSH Flag를 사용하여 데이터를 서버측에 넘겼는데 왜 응답코드도 함께 넘길까요 ?"
ACK(4001) 같이 나가는 이유는 client와 server 간에 이루어진 연결을 유지 하기 위함.
TCP는 연결지향 프로토콜이라는 걸 기억하자.
Q2. "서버측에서 CLOSED를 바로 하지않고 "TIME_WAIT" 상태를 갖는 이유는 뭘까요 ?"
바로 마지막 패킷이 제대로 전송이 되었는지를 확인하기 위해 필요한 것이다.
위 풀이에서
서버가 클라이언트에 "ACK(3012)" 마지막 메시지를 보냈지만 만약 클라이언트가 받지 못하고 종료할 경우,
클라이언트는 응답을 받지 못했으니 "FIN(3011), ACK(4009) 메시지를 서버에 다시 보낼 것이다. 하지만 서버는 종료된 상태이고 따라서 원활한 종료가 이루어지지 않을 것이다.
그리하여 일정 시간의 TIME-WAIT 시간이 주어지게 된다 (혹시 모를 패킷 전송 실패에 대비)
이 시간 모두 지나면 그제서야 소켓을 반환하고 종료.
의문점. CLOSE_WAIT & TIME_WAIT 각각 시간은 몇정도 되며 만약 패킷부하가 걸리면 어떻게 될지 궁금함.
FIN_WAIT2는 net.ipv4.tcp_fin_timeout을 설정해서 변경할 수 있으며
CentOS의 경우에 60초로 설정되어 있습니다.
TIME_WAIT는 2*MSL(Maximum Segment Lifetime)으로 60초로 고정되어 있으며 변경할 수 없습니다.
여기를 참고해보면 좋을 듯 합니다.
https://tech.kakao.com/2016/04/21/closewait-timewait/
TCP 상태 그림 출처 -https://codedatasotrage.tistory.com/24
반응형
'인프라 > Network' 카테고리의 다른 글
[VirtualBox] 호스트 네트워크 관리자 뜨지 않는 문제 - 성공 (0) | 2022.01.10 |
---|---|
[Network] TCP 3Way Handshake & 4Way Handshake 란? (0) | 2022.01.07 |
[Network] IPv4 패킷 구조와 삽질 (0) | 2022.01.06 |
[Network] 네트워크를 효율적으로 관리하기 - 서브넷팅 & 슈퍼넷팅 (0) | 2022.01.06 |
[Network] 라우팅 프로토콜 - RIP,OSPF (0) | 2022.01.05 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- aws
- 회고
- 자바
- 알고리즘
- 라우팅
- SpringBoot
- 계층
- 스위치
- 삽질
- 회고록
- 네트워크
- ec2
- Docker
- java
- .NET
- s3
- 라우터
- lambda
- rds
- 프로토콜
- 초보
- 3Way Handshake
- 개발
- osi7계층
- 프로그래머스
- spring
- Spring Boot
- 개발자
- tcp
- dto
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함