본문 바로가기

네트워크

자바 채팅 분석 / thread pool/ string pool

나돌                        IP                       옥돌 

클라이언트           Internet                    서버 

 

 

end to end : node to node : 종단 <-> 종단 

 

통신을 하기 위해서는 IP + PORT 가 필요가 한데요 ~ 

PORT가 필요한 이유는 서비스를 구분하기 위해서 입니다. 

 

소켓(socket)의 필요성 : internet 을 경유하여 오는 데이터의 서비스 유형을 구분하기 위해서입니다.

 

Ipaddress -> 클라이언트 를 구분 

 

tcp/udp port -> 서비스를 구분 

 

port : well known port- 1~1024

대표적 ) telnet 23 ftp 20,21 

 

예외적으로 well knwon 에 할당 된 포트를 변경하기도 합니다. 

 

그 이유는

1) 보안에 취약하기 때문이고 (포트 번호를 이미알고 있기 때문이죠

옥돌이는 분홍색을 좋아해서 분홍옷을 입고 다닙니다. 그러면 단순히 다른 사람이 

옥돌이를 해킹하려고 할 때 분홍색을 찾겠죠~ !)

2) 포트 번호가 낭비되어서 유동성이 없기 때문입니다.

 

그래서 1024 이후에 어떤 포트든 임의로 배정해주어도 괜찮습니다.

 

 

 

(TCP)옥돌  채팅방  FTP  HTTP  ORACLE DB                DHCP DNS  옥돌 TV                 

 

TCP                UDP 

 

 

IP

 

 

TCP                 UDP

 

 

 

나돌 클라이언트                        나돌 시청자 클라이언트 

 

 

 

 

TCP를 사용해야 하는 이유

 

송신측 ) 다옥돌이 발전할 수 있는 시발점은 그의 열정과 ~ ~ 였습니다.

 

-> BYTE 단에서 누락이 발생 

 

수신측 ) 다옥돌 ~ ~ && 시x ..

 

이렇게 될 수 잇습니다. 

그래서 채팅 프로그램 같은 경우는 대부분 TCP를 사용하는 것이지요

안정성을 위해서요 

그런데 

 

유투브 실시간 채널이라던가

실시간 채팅 같은 경우에는 UDP 를 사용할 수 있지 않을 까 싶습니다. 

 

 

클라이언트의 Request를 accept 할 수 있는 포트를 생성하는 행위 : binding ===> bind () ;

 

 

 

 

클라이언트            서버

 

                            bind ()

 

 

      소켓생성           소켓 생성

 

                                                          listen()

 

     connect()               accept()

 

---SYN----->

 

<-----ACK----

<-----SYN----

 

-----ACK---->

 

(3 way handshake)

 

Session established 

 

Send()    Output                 Input      Send()

                  Receive()                                        Receive()                   

   Input                    Output  

                                보조스트림                    보조 스트림 ---> Thread/ Thread pool

 

close()                              

---FIN---->

 

<-----ACK----  

<-----FIN----

                                        close wait

-----ACK---->

 

                                         shut down

 

(4 way handshake)

 

 

 

 

 

 

 

 

 

thread pool --> string pool

번외) 

String str1 = "hello";

String str2= "hello";

--> str1 == str2 -> true

같은 값을 가리키고 있어서 true가 됩니다.

 

str3 ="hello" 여도 

같은 값을 가리키고 있기 때문에 true가 됩니다.

 

그러면 이때  heap 영역에  string pool 를 만들어서 

hello 를 넣어둔다면 어떤 장점이 있을까요 ??

 

 

 

1. 메모리 활용 자유로움 (메모리 추가할당 안함 )

2. 시간 더 빨라짐 (pool 에 요원이 대기 바로 시킴 )